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++ - [C] Lettura EOF da stdin
Forum - C/C++ - [C] Lettura EOF da stdin - Pagina 2

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
Premoli (Normal User)
Pro


Messaggi: 108
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 18:22
Venerdì, 27/05/2011
noo!!!

Ma tu hai provato?
In alternativa c'è un qualche modo per "simulare" la pressione di invio (senza usare le API)?

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 18:26
Venerdì, 27/05/2011
Testo quotato

Postato originariamente da Premoli:

noo!!!

Ma tu hai provato?
In alternativa c'è un qualche modo per "simulare" la pressione di invio (senza usare le API)?



ho provato nel mio fantasmagorico compilatore sinaptico iperuranico... (cioè no).
Vado a memoria :p

PM Quote
Avatar
Premoli (Normal User)
Pro


Messaggi: 108
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 18:27
Venerdì, 27/05/2011
Se ti può essere di "aiuto" ho notato che ad esempio
se faccio così:
ciaoCTRL-Z
e poi stampo a video trovo alla fine della stringa il simbolo →
ovvero ciao→ ovvero il carattere ascii 26 che dovrebbe essere proprio l'EOF...

PM Quote
Avatar
Premoli (Normal User)
Pro


Messaggi: 108
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 18:37
Venerdì, 27/05/2011
Ho risolto così:

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.     char str;
  6.  
  7.     do{
  8.         str=getchar();
  9.     }while(str!=26);
  10.  
  11.     return 0;
  12. }



Anche se sinceramente non capisco perché con EOF non funzionava a dovere

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 18:41
Venerdì, 27/05/2011
Testo quotato

Postato originariamente da Premoli:

Se ti può essere di "aiuto" ho notato che ad esempio
se faccio così:
ciaoCTRL-Z
e poi stampo a video trovo alla fine della stringa il simbolo →
ovvero ciao→ ovvero il carattere ascii 26 che dovrebbe essere proprio l'EOF...



non il 26, EOF è codificato dal -1 (-1 a 32 bit, quindi 0xFFFFFFFF che è diverso dal -1 a 8bit della tabella ASCII che corrisponde in realtà al numero 255 0x000000FF)

http://www.daniweb.com/software-development/c/threads/3295 ...

Qui dice che su Linux EOF è generato da CTRL-D invece su Windows bisogna fare CTRL-Z + Invio
Quindi è tutto nella norma, bastava solo capire come Windows genera il carattere EOF :-)

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 18:43
Venerdì, 27/05/2011
Testo quotato

Postato originariamente da Premoli:

Ho risolto così:

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.     char str;
  6.  
  7.     do{
  8.         str=getchar();
  9.     }while(str!=26);
  10.  
  11.     return 0;
  12. }



Anche se sinceramente non capisco perché con EOF non funzionava a dovere



Soluzione errata... vedi sopra.

PM Quote
Avatar
Premoli (Normal User)
Pro


Messaggi: 108
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 18:46
Venerdì, 27/05/2011
Testo quotato

Postato originariamente da TheKaneB:

Testo quotato

Postato originariamente da Premoli:

Ho risolto così:

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.     char str;
  6.  
  7.     do{
  8.         str=getchar();
  9.     }while(str!=26);
  10.  
  11.     return 0;
  12. }



Anche se sinceramente non capisco perché con EOF non funzionava a dovere



Soluzione errata... vedi sopra.



Infatti non funziona sempre... ma allora come devo fare?

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 18:49
Venerdì, 27/05/2011
Testo quotato

Postato originariamente da Premoli:

Testo quotato

Postato originariamente da TheKaneB:

Testo quotato

Postato originariamente da Premoli:

Ho risolto così:

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.     char str;
  6.  
  7.     do{
  8.         str=getchar();
  9.     }while(str!=26);
  10.  
  11.     return 0;
  12. }



Anche se sinceramente non capisco perché con EOF non funzionava a dovere



Soluzione errata... vedi sopra.



Infatti non funziona sempre... ma allora come devo fare?



Prima di tutto, rimetti le cose come prima, cioè usa una variabile di tipo "int".

Seconda cosa, non usare COMMAND.COM perchè il carattere 26 (0x1A) è un carattere che il DOS mette alla fine dei file, mentre lo standard Unix (quello usato dal C) richiede che l'EOF non sia un carattere ASCII, ma un codice di controllo esterno alla tabella ASCII.
Infatti EOF è un numero a 32 bit negativo, invece gli ASCII sono tutti numeri a 8bit senza segno (tutti positivi).

Risolvi usando un programma terminale moderno (CMD) e usa CTRL-Z + Invio per dare il comando di EOF. Su Linux usa invece CTRL-D.

PM Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo