Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Programma impazzito
Forum - C/C++ - Programma impazzito

Avatar
Riccardo4444 (Normal User)
Newbie


Messaggi: 7
Iscritto: 21/12/2010

Segnala al moderatore
Postato alle 19:17
Mercoledì, 02/02/2011
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++

  1. #include <stdio.h>
  2.  
  3.   main(){
  4.    int c,ns;
  5.  
  6.    printf("Qunti spazi ci sono nel tuo input?\n");
  7.    
  8.    ns = 0;
  9.    while ((c=getchar()) != EOF)
  10.     if (c == ' ')
  11.      ++ns;
  12.  
  13.    printf("Il numero degli spazi è %d!\n", ns);
  14.    getchar();
  15.  
  16.   }



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

PM
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Up
2
Down
V
Segnala al moderatore
Postato alle 5:10
Venerdì, 04/02/2011
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à...

PM
Avatar
carlduke (Member)
Pro


Messaggi: 153
Iscritto: 29/01/2011

Up
0
Down
V
Segnala al moderatore
Postato alle 19:24
Mercoledì, 02/02/2011
ho avuto questo problema anch'io, dato che ho seguito sullo stesso manuale..di solito risolvevo mettendo

Codice sorgente - presumibilmente Plain Text

  1. 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
PM
Avatar
Alex (Ex-Member)
Expert


Messaggi: 441
Iscritto: 15/08/2005

Up
0
Down
V
Segnala al moderatore
Postato alle 20:35
Mercoledì, 02/02/2011
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
PM
Avatar
carlduke (Member)
Pro


Messaggi: 153
Iscritto: 29/01/2011

Up
0
Down
V
Segnala al moderatore
Postato alle 20:51
Mercoledì, 02/02/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

PM
Avatar
Alex (Ex-Member)
Expert


Messaggi: 441
Iscritto: 15/08/2005

Up
0
Down
V
Segnala al moderatore
Postato alle 10:44
Giovedì, 03/02/2011
a me invece funziona...

e se invece leggi un'intera riga con gets e poi conti gli spazi?

PM
Avatar
carlduke (Member)
Pro


Messaggi: 153
Iscritto: 29/01/2011

Up
0
Down
V
Segnala al moderatore
Postato alle 15:07
Giovedì, 03/02/2011
si puo fare cosi..il fatto è che se usa scanf c'è il solito problema degli spazi..consiglio fgets

Ok ora vado a casa, provo, e vi rispondo mercoledì 9 (ci sono solo il lunedì e il mercoledì qui) - Riccardo4444 - 07/02/11 19:06
PM