[c] esercizzio conteggio caratteri da stdin
con il linguaggio c
mi sono accorto di avere un programmino che conta i caratteri del file .
tipo cosi
cosi ho provato ha fare la stessa cosa con lo stdin
ma dopo un po di prove ho dei problemi !
il tipo di errore e questo ...... deve essere uno sbaglio sui puntatori.
qualcuno sa darmi una mano ?
mi sono accorto di avere un programmino che conta i caratteri del file .
tipo cosi
FILE *fpSource; if((fpSource = fopen("righe.txt", "r")) != NULL) { codice } else { perror("Errore in apertura del file. \n"); }
cosi ho provato ha fare la stessa cosa con lo stdin
ma dopo un po di prove ho dei problemi !
#include<stdio.h> #define MAX_SIZE 60 main() { int nc; /*conteggio dei caratteri*/ char ca; /* carattere */ char riga[MAX_SIZE] = ""; // prima stringa esterna di carica usata da reset nc = 0; fgets(riga, MAX_SIZE, stdin); while ((ca=fgetc(riga)) != EOF) { ++nc; } printf("\ti caratteri sono : %d\n", nc); }
il tipo di errore e questo ...... deve essere uno sbaglio sui puntatori.
luca@luca-desktop:~/Scrivania/progetto$ gcc progetto7.c progetto7.c: In function ‘main’: progetto7.c:10: warning: passing argument 1 of ‘fgetc’ from incompatible pointer type luca@luca-desktop:~/Scrivania/progetto$
qualcuno sa darmi una mano ?
Risposte
Prego

approposito , mi sono accorto che :
se inserisco da stdin la frase con piu spazzi .
il programma a video mi fa vedere simboli casuali .
tipo :
>>
>>
>>���������
>>T)�����;��
>>X8��q��
come faccio ad oviare questo problema ?
se inserisco da stdin la frase con piu spazzi .
il programma a video mi fa vedere simboli casuali .
tipo :
>>
>>
>>���������
>>T)�����;��
>>X8��q��
come faccio ad oviare questo problema ?
#include<stdio.h> main() { int max_riga=20; int max_colonna=20; int lung=0; int stri=0; int spaz=0; char c; int i; char input[max_riga][max_colonna]; input[stri][0] = '\0'; while ((c = fgetc(stdin)) != '\n') { if (c == ' ') { if(spaz==0) { lung=0; stri++; } spaz=1; } else { spaz=0; input[stri][lung] = c; input[stri][lung+1] = '\0'; lung++; } } printf("\n"); for(i=0;i<stri+1;i++) printf(">>%s\n", input[i]); }
beh sostanzialmente aumentando max_riga e max_colonna
ti da quell'errore perché stai uscendo dai limiti definiti per la struttura
questo ovviamente ti comporterà un problema e cioè che gli spazi verranno
conteggiati come nuove parole e quindi avrai tante righe quanti spazi
con la nuova versione che trovi qui quel problema è risolto.
il programma funziona .
il programma funziona .
ma non mi soddisfa :
perchè quando io scrivo :
essendoci degli spazzi finali, il programma crea una riga vuota finale.
ho provato ha modificarlo .
devo inserire un variabile che indica l'inizzio di una parola .
grazzie ancora della pazienza
#include<stdio.h> main() { int max_riga=20; int max_colonna=20; int lung=0; int stri=0; int spaz=0; char c; int i; char input[max_riga][max_colonna]; while ((c = fgetc(stdin)) != '\n') { if (c == ' ') { if(spaz==1) { lung=0; stri++; spaz=0; } } else { spaz=1; input[stri][lung] = c; input[stri][lung+1] = '\0'; lung++; } } printf("--------------------------------------------\n"); for(i=0;i<stri+1;i++) printf(">>%s\n", input[i]); }
il programma funziona .
ma non mi soddisfa :
perchè quando io scrivo :
" La mamma è andata a fare la spesa "
essendoci degli spazzi finali, il programma crea una riga vuota finale.
>>La >>mamma >>è >>andata >>a >>fare >>la >>spesa >>
ho provato ha modificarlo .
devo inserire un variabile che indica l'inizzio di una parola .


grazzie ancora della pazienza
Questo problema nasce dal fatto che incrementi stri appena incontri uno spazio senza chiederti se poi esiste o meno una parola successiva.
Quindi stri sarà sempre di una unità più grande, pertanto potresti risolvere semplicemente modificando il ciclo finale dove hai messo il (stri + 1) in (stri)
Quindi stri sarà sempre di una unità più grande, pertanto potresti risolvere semplicemente modificando il ciclo finale dove hai messo il (stri + 1) in (stri)
#include<stdio.h> main() { int max_riga=20; int max_colonna=20; int lung=0; int stri=0; int spaz=0; char c; int i; char input[max_riga][max_colonna]; while ((c = fgetc(stdin)) != '\n') { if (c == ' ') { spaz=1; } else { input[stri][lung] = c; input[stri][lung+1] = '\0'; lung++; if(spaz==1) { lung=0; stri++; spaz=0; } } } printf("--------------------------------------------\n"); for(i=0;i<stri+1;i++) printf(">>%s\n", input[i]); }
domani gli do un ochiata meglio .

-------------------------------------------- >>l >>am >>ammah >>af >>attol >>as >>pesa
era li for sbagliato !.
io guardavo da un altra parte !
grazie
for(i=0;i<stri+1;i++)
io guardavo da un altra parte !
grazie
l'avevo scritto....
