Oppure

Loading
27/05/11 16:49
TheKaneB
Postato originariamente da Premoli:

Postato originariamente da TheKaneB:

Postato originariamente da Premoli:

Ho risolto così:

#include <stdio.h>

int main()
{
    char str;

    do{
        str=getchar();
    }while(str!=26);

    return 0;
}


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.
aaa
27/05/11 16:59
Premoli
Niente da fare...
Continua a darmi sempre lo stesso problema.
aaa
27/05/11 17:07
TheKaneB
Postato originariamente da Premoli:

Niente da fare...
Continua a darmi sempre lo stesso problema.


brucia il computer e prenditi un 486
aaa
27/05/11 17:16
Premoli
ASD!!!
questo è un gran bel problema...
aaa
27/05/11 19:26
TheKaneB
oppure per fare questi esperimenti installati linux in una virtual machine (Virtual Box ad esempio).

Per programmini da riga di comando è meglio, perchè in fondo il C è stato inventato proprio per programmare Unix e oltre al C standard puoi anche sfruttare tutta la parte estesa POSIX che su Windows non c'è (o è molto limitata).
aaa
28/05/11 7:43
Premoli
Il problema è che sto lavorando ad un progetto e ho creato una funzione che acquisisce una grammatica (sto parlando di linguaggi formali) e, dato che nell'acquisizione faccio vari controlli per verificare la correttezza di ogni produzione e, dato che o da file o da tastiera la funzione doveva comportarsi allo stesso modo, volevo usare la stessa funzione per entrambi i casi, una volta passandogli il puntatore al file e una volta passandogli stdin...
Spero di essermi spiegato.
aaa
28/05/11 10:18
TheKaneB
Postato originariamente da Premoli:

Il problema è che sto lavorando ad un progetto e ho creato una funzione che acquisisce una grammatica (sto parlando di linguaggi formali) e, dato che nell'acquisizione faccio vari controlli per verificare la correttezza di ogni produzione e, dato che o da file o da tastiera la funzione doveva comportarsi allo stesso modo, volevo usare la stessa funzione per entrambi i casi, una volta passandogli il puntatore al file e una volta passandogli stdin...
Spero di essermi spiegato.


ti sei spiegato benissimo, e se non lo sapessi questo è il modo standard di operare di tutti i programmi Unix. Da cui il consiglio di prima :-)
aaa
28/05/11 17:00
Premoli
niente neanche su linux...
Stesso problema se prima non premo invio sono costretto a premere CTRL-d due volte di seguito prima di ottenere il risultato sperato, che non sarebbe neanche tanto fastidioso se non fosse che mi sporca la stringa, ora per risolvere ho messo un if che non mi salva l'ultimo carattere letto, anche se non sono molto soddisfatto avrei preferito capire quale sia il problema...
aaa