scanf
renvoie le nombre d'entrées de lecture et affecté, pas la valeur de l'entrée lui-même. Dans ce cas particulier, vous n'attendez qu'une seule entrée, donc scanf
retournera 1 en cas de succès, 0 en cas d'échec de correspondance (l'entrée ne commence pas avec un chiffre décimal), ou EOF s'il voit la fin de fichier ou une erreur.
Si vous souhaitez tester contre la valeur de l'entrée, vous feriez quelque chose comme
while(scanf(“%d”, &n) == 1 && n == EXPECTED_VALUE)
{
printf(“%d”, n);
}
Modifier
En fait, une meilleure façon de le faire serait quelque chose comme ceci:
int n;
int itemsRead;
/**
* Read from standard input until we see an end-of-file
* indication.
*/
while((itemsRead = scanf("%d", &n)) != EOF)
{
/**
* If itemsRead is 0, that means we had a matching failure;
* the first non-whitespace character in the input stream was
* not a decimal digit character. scanf() doesn't remove non-
* matching characters from the input stream, so we use getchar()
* to read and discard characters until we see the next whitespace
* character.
*/
if (itemsRead == 0)
{
printf("Bad input - clearing out bad characters...\n");
while (!isspace(getchar()))
// empty loop
;
}
else if (n == EXPECTED_VALUE)
{
printf("%d\n", n);
}
}
if (feof(stdin))
{
printf("Saw EOF on standard input\n");
}
else
{
printf("Error while reading from standard input\n");
}
'' scanf' peut retourner EOF', donc en plus de votre 'si (n! = 1)' chèque, votre 'while' condition doit être' while (scanf ("% d", et n) == 1) '. – user694733