Riccardo4444 (Normal User)
Newbie
Messaggi: 7
Iscritto: 21/12/2010
|
Ciao.
Ho incominciato a studiare il C, conoscendo già il Pascal, dal libro "Il linguaggio C" di Kernighan e Ritche, ma ho un problema:
il mio compilatore, almeno per quanto la penso io, non funziona per quelle applicazioni che richiedono getchar() o/e putchar(), dove per esempio uso un ciclo while per calcolare il numero dei caratteri dato un input. Il problema è che una volta dato l'input, io dovrei aspettarmi una scritta tipo "Sono presenti %d caratteri", dove %d sta per una variabile int, invece manda a capo e ripete l'inserimento dell'input all'infinito. Questo per tutti i programmi esempio, ma anche miei personali, con getchar() e putchar(). Se pensate che ci siano errori di sintassi controllate questo codice:
Codice sorgente - presumibilmente C++ |
#include <stdio.h> main(){ int c,ns; printf("Qunti spazi ci sono nel tuo input?\n"); ns = 0; while ((c=getchar()) != EOF) if (c == ' ') ++ns; printf("Il numero degli spazi è %d!\n", ns); getchar(); }
|
Questo esempio il compilatore tuttavia compila con successo, se gli dò la direttiva di applicare lo standard ANSI. Io uso(o meglio, non ho mai usato) DevC++ per Windows e GCC per Linux, ma in entrambi ho provato tutte le cose possibili per far funzionare il programma, sia a livello di stesura del codice, sia per quanto riguarda la configurazione del compilatore. Niente da fare! Sono letteralmente bloccato con lo studio di questo linguaggio, che tra l'altro mi inizia a piacere molto, e desidererei altrettanto andare avanti e non fermarmi a queste banalità , anche se in effetti tutto ciò mi sta compromettendo troppe cose.
Sarei grato se foste così gentili da illustrarmi cosa ho bisogno di fare per risolvere questo strano arcano e magari darmi qualche dritta... Grazie in anticipo.
P.S. Ho provato anche cc e c99 su Linux, e ho pure tentato di far funzionare Borland C++ Compiler 5.5, quello a linea di comando, su Windows, ma per quest'ultimo non ho saputo proprio da dove cominciare per l'installazione...
|
|
TheKaneB (Member)
Guru^2
Messaggi: 1792
Iscritto: 26/06/2009
|
Read the Fantastic Manual, recitava qualcuno...
il carattere di End Of File, puoi generarlo con CTRL-D su qualsiasi console compatibile VT-100, oppure con CTRL-Z su qualche sfigatissimo emulatore di terminale dalla dubbia sessualità...
|
|
carlduke (Member)
Pro
Messaggi: 153
Iscritto: 29/01/2011
|
ho avuto questo problema anch'io, dato che ho seguito sullo stesso manuale..di solito risolvevo mettendo
Codice sorgente - presumibilmente Plain Text |
while((c = getchar()) != '1'){ //o qualsiasi altro numero o lettera o simbolo, ma che non sia una stringa
|
penso che questo metodo (mi riferisco a (c = getchar()) != EOF) sia valido solo per leggere da file, ovviamente con le funzioni apposite per i file
Ultima modifica effettuata da carlduke il 02/02/2011 alle 20:11 |
|
Alex (Ex-Member)
Expert
Messaggi: 441
Iscritto: 15/08/2005
|
la condizione (getchar()!=EOF) va bene se stai leggendo l'input da un file...
prova a mettere (getchar()!='\n'...
inserisci tutti i caratteri che vuoi e quando hai finito premi invio..
p.s.il libro che hai preso te è abbastanza complicato per iniziare...io avrei preso quello della dietel....però ormai vai con quello...
Ultima modifica effettuata da Alex il 02/02/2011 alle 20:37 |
|
carlduke (Member)
Pro
Messaggi: 153
Iscritto: 29/01/2011
|
no, se metti getchar() != '\n' non ti farà scrivere niente, perchè la sringa in input anche se non digiti nulla contiene il carattere '\n' quindi il programma si interrompe subito
|
|
Alex (Ex-Member)
Expert
Messaggi: 441
Iscritto: 15/08/2005
|
a me invece funziona...
e se invece leggi un'intera riga con gets e poi conti gli spazi?
|
|
carlduke (Member)
Pro
Messaggi: 153
Iscritto: 29/01/2011
|
si puo fare cosi..il fatto è che se usa scanf c'è il solito problema degli spazi..consiglio fgets
|
|