[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....