2015-12-05 1 views
0

J'ai besoin de lire tous les entiers jusqu'à l'EOF. J'essaye ce code et le problème est que le programme ne détecte pas l'EOF et continue à courir. Ce dont j'ai besoin est de recevoir toutes les données et de passer automatiquement à la ligne de code suivante (le code fonctionne en appuyant sur Ctrl-D après l'entrée).Lire les entiers jusqu'à EOF en C

int x, sum = 0; 

while (scanf("%d", &x) == 1) { 
    sum += x; 
} 

if (feof(stdin)) { 
    printf ("SUM: %d\n", sum); 
} else { 
    printf("ERROR\n"); 
} 

return 0; 
+1

Alors, quel est le problème? – PSkocik

+6

Vous avez tout fait correctement et il se comporte comme il se doit.^D envoie l'EOF quand votre stdin est un terminal, et il fonctionne aussi avec de vrais fichiers. – PSkocik

+4

Peut-être y a-t-il confusion sur ce que signifie EOF pour STDIN? Cela ne signifie pas "ligne vide". – Schwern

Répondre

0

Comment voulez-vous spécifier EOF?

  • ^D est la façon de le faire dans le terminal sous Unix. Dans le terminal Windows, ^Z fait la même chose. scanf renverra -1 et feof() sera non nul. Mais toute autre entrée de stdin échouera aussi.

  • Voulez-vous simplement appuyer sur la touche Entrée? Si oui, vous devez vérifier cela après scanf, sinon le prochain appel à scanf lira le saut de ligne et l'ignorera. Si vous tapez quelque chose qui n'est ni un espace ni un nombre, scanf renverra 0 et laissera le caractère sans correspondance dans le flux d'entrée. Votre programme imprimera ERROR. Est-ce que c'est ce qui se passe?