Ceci est un endroit parfait pour utiliser l'un des opérateurs rarement mémorisés par C, l'opérateur "," ou de séquençage. Voici votre code réécrite pour en faire usage:
#include <stdio.h>
int main()
{
char *str[] = { "123", "456", "789", "0" };
int i = 0;
int n0;
int scanret;
while((scanret = sscanf(str[i], "%d", &n0)), n0 != 0)
{
printf("i = %d n0 = %d scanret = %d\n", i, n0, scanret);
i += 1;
}
printf("i = %d n0 = %d scanret = %d after loop termination\n", i, n0, scanret);
}
Jetez un oeil à la condition de la boucle while
. Ce qui se passe ici est que le sscanf est évalué en premier, puis le test n0 != 0
est évalué. Notez que ce n'est PAS un opérateur 'et' ou 'ou' (comme vous pouvez le constater en examinant l'exemple de sortie ci-dessous) - le sscanf est exécuté et le résultat de n0 != 0
est utilisé comme test pour la boucle while
car while
utilise la valeur de la dernière expression évaluée dans sa condition comme valeur de la condition.
Si vous exécutez cela, vous obtiendrez une sortie similaire à:
i = 0 n0 = 123 scanret = 1
i = 1 n0 = 456 scanret = 1
i = 2 n0 = 789 scanret = 1
i = 3 n0 = 0 scanret = 1 after loop termination
Partager et profiter.
Votre titre est extrêmement mauvais. – Maroun
C'est incroyable. – SubSevn
'scanf' renvoie le nombre de conversions réussies. Vous devez vérifier la valeur de 'n0'. –