comment utiliser EOF stdin en C
J'ai besoin pour entrer les coordonnées dans un tableau jusqu'à ce que EOF est rencontré, mais quelque chose cloche dans mon code. J'ai utilisé ctrl+Z ctrl+D
int main()
{
int x[1000],y[1000];
int n=0,nr=0,a,b,i;
printf("Enter the coordinates:\n");
while(scanf ( "%d %d ", &a, &b) == 2)
{
x[n]=a;
y[n]=b;
n++;
}
if (!feof(stdin))
{
printf("Wrong\n");
}
else
{
for(i=0;i<n;i++)
printf("%d %d\n", x[i], y[i]);
}
return 0;
}
Est mal toujours imprimés?
OriginalL'auteur Trung Nguyen | 2011-11-11
Vous devez vous connecter pour publier un commentaire.
Je suggère d'utiliser
et effectivement c'est mieux de tester feof après (pas avant!) certains de fonctionnement d'entrée, de sorte que:
BTW, sur de nombreux systèmes
stdin
est ligne mise en mémoire tampon, au moins avec les bornes interactives (mais peut-être pas quand stdin est un pipe(7)), voir setvbuf(3)Sur Linux & POSIX, vous pourriez envisager la lecture de chaque ligne avec getline(3) (ou même avec des readline(3) si la lecture à partir du terminal, depuis
readline
offre des capacités d'édition), puis l'analyse de cette ligne, par exemple avec sscanf(3) (peut-être aussi à l'aide de%n
) ou strtol(3)OriginalL'auteur Basile Starynkevitch
Le seul vrai problème que je vois dans votre code les espaces supplémentaires dans le
scanf
chaîne de format. Ces espaces direscanf
de consommer de l'espace à l'entrée, ce qui rendscanf
pas de retour de votre code jusqu'à ce qu'il frappe d'un caractère non-blanc (par exemple une lettre, un chiffre, signe de ponctuation, ou EOF).Le résultat est qu'après la saisie de deux nombres, et Entrée, vous devez taper Ctrl-D (Ctrl-Z sous DOS/Windows) deux fois avant que votre programme s'échappe de l'
while
boucle.OriginalL'auteur christop