Salve a tutti. Devo leggere un file di questo tipo:
So a priori che ogni operazioni ha 3 fattori: operando1 operazione operando2.codice:3 + 9 4 * 2 123 - 27
Devo naturalmente leggere tralasciando gli spazi e inserire queste operazioni in una matrice di char, in questo modo:
Il codice che uso per leggere le stringhe è questo:codice:c1 c2 c3 r1: 3 + 9 r2: 4 * 2 r3: 123 - 27
Usando la fscanf ho notato che gli spazi li omette in automatico quindi faccio le seguenti operazioni:codice:int i=0, j=0, k=0, n=1; char stringa[MAXOP]; while(!feof(fpin)){ fscanf(fpin, "%s", stringa); if((n%3)==0){ k++; j=0; } for(i=0; i<strlen(stringa); i++){ str[k][j]=stringa[i]; printf("%c %d\n", str[k][j], n); j++; } n++; } return n/3;
1. Leggo la stringa e la inserisco in una variabile temporanea
2. Se n (numero di stringhe lette) è multiplo di 3 posso andare alla riga successiva
3. Scannerizzo la stringa letta (può essere un solo carattere, come 3, ma anche 123, quindi tre caratteri) e li inserisco nella matrice, alla riga k-esima
4. Aumento n
Con quell'output di prova [printf("%c %d\n", str[k][j], n)] i numeri si trovano tutti. Devo restituire il numero di operazioni lette quindi ritorno n/3. E si trova.
Ma quando vado a stampare con questo codice:
Mi esce in output:codice:void Stampa_Operazioni(char ops[][NCAR], int n) { int i; for(i = 0; i < n; i++) printf("%s\n", ops[i]); }
3+
94*
2123-
Qualche consiglio? Sto codice che ho scritto mi sembra orrendo, ma non mi è venuto in mente altro.


Rispondi quotando