Salve a tutti. Devo leggere un file di questo tipo:
codice:
3 + 9 4 * 2 123 - 27
So a priori che ogni operazioni ha 3 fattori: operando1 operazione operando2.
Devo naturalmente leggere tralasciando gli spazi e inserire queste operazioni in una matrice di char, in questo modo:
codice:
c1 c2 c3
r1: 3 + 9
r2: 4 * 2
r3: 123 - 27
Il codice che uso per leggere le stringhe è questo:
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;
Usando la fscanf ho notato che gli spazi li omette in automatico quindi faccio le seguenti operazioni:
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:
codice:
void Stampa_Operazioni(char ops[][NCAR], int n)
{
int i;
for(i = 0; i < n; i++)
printf("%s\n", ops[i]);
}
Mi esce in output:
3+
94*
2123-
Qualche consiglio? Sto codice che ho scritto mi sembra orrendo, ma non mi è venuto in mente altro.