PDA

Visualizza la versione completa : [C] Lettura da tastiera e visualizzazione a video


aspire1982
27-04-2007, 17:34
aiuto perfavore sto impazzendo....ho sempre usato altri linguaggi di programmazione:java ,pascal.....eccc ma mai il C....ho piccolo ma allostesso tempo enorme problema eseguo questo progamma banale ma non fa quello che dovrebbe fare:

#include <stdio.h>

main()
{
char vet[3];
int i;
for (i=0;i<3;i++)
{
scanf("%c",&vet[i]);
}

for (i=0;i<3;i++)
{
printf("%c",vet[i]);
}
system("pause");
}

è banalissimo leggi da tastire dei caratteri e li mette in un vettore dopo di che stampa

dovrebbe eseguire lo scanf e il printf 3 volte per i=0,1,2 ma lo esegue solo due volte e nel caso in cui metto \n nello scanf esegue lo scan f più di 3 volte cioè 4


perchè sto impazzendo!!!!!!

Samuele_70
27-04-2007, 17:59
Originariamente inviato da aspire1982
...
è banalissimo leggi da tastire dei caratteri e li mette in un vettore dopo di che stampa

dovrebbe eseguire lo scanf e il printf 3 volte per i=0,1,2 ma lo esegue solo due volte e nel caso in cui metto \n nello scanf esegue lo scan f più di 3 volte cioè 4
...

Dato che inserisci tu stesso i caratteri nella stringa, devi anche farti carico della sua
corretta terminazione.
Aggiungi :


vet[i]='\0';

dopo il primo ciclo for().

aspire1982
27-04-2007, 18:31
e se nono voglio farmi carico come faccio che funzione uso

Samuele_70
27-04-2007, 18:39
Acquisisci direttamente una stringa.


#include <stdio.h>

int main()
{
char vet[80];
scanf("%s", vet);
printf("\nHai digitato '%s'", vet);
getchar();
return 0;
}

E così ci penserà la scanf() a mettere il terminatore.

LeleFT
27-04-2007, 18:43
Ho modificato il titolo perchè non era conforme al regolamento.


Ciao. :ciauz:

aspire1982
29-04-2007, 19:56
comunque anche come dici tu no va bene !!!mentre ho risolto con fflush(stdin)..... lo scanf noto che si ingrippa se dopo non usi fflush(stdin);

Samuele_70
29-04-2007, 20:30
Originariamente inviato da aspire1982
comunque anche come dici tu no va bene !!!mentre ho risolto con fflush(stdin)..... lo scanf noto che si ingrippa se dopo non usi fflush(stdin);
Che centra la fflush()? :confused:
Se hai risolto mi fa piacere, ma dal messaggio originale (in vero abbastanza stringato e un pò sgrammaticato)
non si è ben capito quale fosse effetivamente il problema. :zizi:

aspire1982
30-04-2007, 13:28
comunque per sfizio compialo con un compilatore C qualunque ...io l'ho provato anche sotto linux con il GCC e niente tutto tace finche non metto fflush(stdin); dopo lo scanf ...provare per credere..........

Samuele_70
30-04-2007, 13:37
Che ne dici di spiegare, molto dettagliatamente, cosa dovrebbe fare il codice...

aspire1982
30-04-2007, 17:19
comunque ho risolto comunque ora ti spiego:......

#include <stdio.h>

main()
{
char vet[3]; qui creo un vettore di 3 caratteri
int i;
for (i=0;i<3;i++)
{
scanf("%c",&vet[i]); questo scanf legge da tastiera un carattere per volta[%c] e
} lo inserisce nel vettore creato sopra (con gli indici scanditi dal for)

for (i=0;i<3;i++) una volta inseriti i caratteri nel vettore
{
printf("%c",vet[i]); questo printf deve stampare i caratteri trovati in vet[i]
}
system("pause"); una semplice pausa
}

se provi questo programma non funziona correttamente .... si impalla solo quando gestisci un vettore di char .....mentre se gestisci un vettore di int tutto ok il programma funziona benissimo.

prova per sfizio sia mettendo char vet[3].....che mettendo int vet[3]....ovviamente quando metti int vet[3] sostituisci %c con %d nello scanf e in printf

Loading