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 |
Utilizare fisier de intrare in functie
Last Updated: Apr 28 2017 22:13, Started by
valtud
, Apr 19 2017 21:06
·
0
#1
Posted 19 April 2017 - 21:06
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
Posted 19 April 2017 - 21:18
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
Posted 21 April 2017 - 07:02
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
Posted 21 April 2017 - 07:59
MarianG, 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 OriginalCopy, 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
Posted 21 April 2017 - 11:12
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
Posted 28 April 2017 - 22:13
OriginalCopy, 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
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users