Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Dacia 1316 cu 6 usi ...

Frecventa modificata radio

Un nou pericol pt batrani

Ar trebuii sa vindem imobiliarele...
 Dupa renuntarea la aparat dentar

pelerinaj in Balcik

Noul format Jpegli iși propu...

Dade, dade
 Parola la lock screen

Deparazitare externa pisici fara ...

Seriale turcesti/coreene online H...

Merita un Termostat Smart pentru ...
 Sfat achizitie MTB Devron Riddle

Problema mare cu parintii= nervi ...

switch microtik

Permis categoria B la 17 ani
 

Utilizare fisier de intrare in functie

- - - - -
  • Please log in to reply
5 replies to this topic

#1
valtud

valtud

    Junior Member

  • Grup: Members
  • Posts: 90
  • Înscris: 02.11.2005
Buna, am facut o functie citire matrice dintr-un fisier si obtin la rulare eroare de sistem, desi compilarea decurge fara eroare.
Am reusit dupa cateva manevre cu printf-uri sa-mi dau seama ca sistemul o ia razna la scanf-ul din functie
Ar putea cineva sa-mi dea o idee de unde provine eroarea?
Eu rulez codul in Code Blocks

void main(void)
{
.......................
citire_matrice (n, m, a[100][100];
.......................
}

int citire_matrice(int n, int m, int matrice[][100])
{
FILE *fi; // definim pointerul pentru fisierul de intrare
// deschidem fisierul pentru citire si testam daca s-a deschis cu succes
if((fi=fopen("fisier.in", "rt"))==NULL) {
printf("\nNu pot sa deschid fisierul de intrare.\n") ;
exit (1);
}
else {printf("\nAm deschis fisierul de intrare.\n") ;}
// Citirea numarului de randuri si coloane din fisierul fisier.in.
fscanf(fi, "%d %d", &n, &m);
printf("\n%d si %d sunt dimensiunile matricii \n", n, m);
int i, j;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
fscanf(fi, "%d", &matrice[i][j]);
}
}
fclose(fi); // inchidem fisierul de intrare
}

Multumesc anticipat!

Edited by valtud, 19 April 2017 - 21:08.


#2
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,443
  • Înscris: 10.08.2005
int citire_matrice(int n, int m, int matrice[][100])
Si te intreb, de ce trimiti n si m ca mai apoi sa ii citesti din fisier?

#3
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Vrei doar să rezolvi problema asta, sau și să primești sfaturi despre cum să structurezi codul elegant, să îl faci reutilizabil și ergonomic?

#4
valtud

valtud

    Junior Member

  • Grup: Members
  • Posts: 90
  • Înscris: 02.11.2005

View PostMarianG, on 19 aprilie 2017 - 21:18, said:

int citire_matrice(int n, int m, int matrice[][100])
Si te intreb, de ce trimiti n si m ca mai apoi sa ii citesti din fisier?

Initial codul arata .... mai altfel, n si m le folosesc in programul principal. Nu le-am mai scos, sa le fac globale, pur si simplu.
Problema nu e asta insa, orice operatie fac cu matricea in functie, da eroare, dar doar la executie, nu la compilare. Acelasi cod scris direct in main() functioneaza ireprosabil.
Am mai trecut in functie si bucati de cod care fac pur si simplu o atribuire a[i][j]=ceva ; si chiar ceva=a[i][j]; si tot aceeasi eroare obtin, la executie

View PostOriginalCopy, on 21 aprilie 2017 - 07:02, said:

Vrei doar să rezolvi problema asta, sau și să primești sfaturi despre cum să structurezi codul elegant, să îl faci reutilizabil și ergonomic?

Orice sfat e binevenit, dar acum vreau sa vad de ce nu merge asta. Sa fie problema de la CodeBlocks? Vezi te rog si raspunsul catre MarianG

#5
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Nu îi pasezi funcției ceea ce crezi că îi pasezi.

Recomandări:

Funcțiile nu au voie să apeleze exit. Funcțiile trebuie să fie reutilizabile, nu să îți fie frică că dacă le apelezi, s-ar putea să îți omoare procesul. Exit de face doar în main sau in funcții special gândite exclusiv pentru exit (ex signal handlers)

Funcțiile trebuie să fie generice în ce privește inputul, și să returneze outputul. Asta înseamnă că funcția ta trebuie să aibă semnătura:

Matrice* citeste_matrice(FILE* f);

Deschiderea fișierul de face în main, iar funcția returnează o structură de date Matrice, care conține câmpurile n, m și int** data.

Funcția citește datele și alocă dinamic structura și **data.

Așa de programează curat, nu aruncat codul la grămadă.

#6
valtud

valtud

    Junior Member

  • Grup: Members
  • Posts: 90
  • Înscris: 02.11.2005

View PostOriginalCopy, on 21 aprilie 2017 - 11:12, said:

Nu îi pasezi funcției ceea ce crezi că îi pasezi.

Recomandări:

Funcțiile nu au voie să apeleze exit. Funcțiile trebuie să fie reutilizabile, nu să îți fie frică că dacă le apelezi, s-ar putea să îți omoare procesul. Exit de face doar în main sau in funcții special gândite exclusiv pentru exit (ex signal handlers)

Funcțiile trebuie să fie generice în ce privește inputul, și să returneze outputul. Asta înseamnă că funcția ta trebuie să aibă semnătura:

Matrice* citeste_matrice(FILE* f);

Deschiderea fișierul de face în main, iar funcția returnează o structură de date Matrice, care conține câmpurile n, m și int** data.

Funcția citește datele și alocă dinamic structura și **data.

Așa de programează curat, nu aruncat codul la grămadă.

Multumesc de raspuns, dar se vede ca e un pic cam peste ... rand pentru mine.
Te rog mult, ai putea sa-mi scrii cum ar trebui sa arate codul meu modificat? Nu ma descurc deloc cu transmiterea de parametri! Mentionez ca e pentru C, nu C++

Edited by valtud, 28 April 2017 - 22:13.


Anunturi

Chirurgia spinală minim invazivă Chirurgia spinală minim invazivă

Chirurgia spinală minim invazivă oferă pacienților oportunitatea unui tratament eficient, permițându-le o recuperare ultra rapidă și nu în ultimul rând minimizând leziunile induse chirurgical.

Echipa noastră utilizează un spectru larg de tehnici minim invazive, din care enumerăm câteva: endoscopia cu variantele ei (transnazală, transtoracică, transmusculară, etc), microscopul operator, abordurile trans tubulare și nu în ultimul rând infiltrațiile la toate nivelurile coloanei vertebrale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate