2 votes

C: scanf avec ==

J'ai vu ce morceau de code. Je suis assez nouveau en C, alors pardonnez-moi.

La boucle while ci-dessous continuera de boucler si i < SIZE && scanf("%f",&Arr[i]) == 1.

Je comprends la partie i < SIZE mais que signifie scanf("%f",&Arr[i]) == 1? Je sais que cela prend la valeur de scanf() et l'assigne à un tableau Arr. Mais que signifie le == 1?

Merci :)

int readValue(float Arr[]) {
    int i = 0 ;
    while (i < SIZE && scanf("%f",&Arr[i]) == 1) 
        i++ ;  
    return i ;
}

2voto

hmjd Points 76411

scanf() retourne le nombre d'assignations effectuées, dans ce cas 1 est censé être effectué donc si scanf() retourne 1 alors &Arr[i] a été correctement assigné une valeur. Sur la page de référence liée, la valeur de retour est décrite comme suit :

Nombre d'arguments receveurs assignés avec succès, ou EOF si une erreur de lecture se produit avant que le premier argument receveur soit assigné

2voto

Mike Points 16224

Il serait probablement plus clair s'il y avait plus de parenthèses ici pour aider à garder à l'esprit l'ordre de priorité des opérateurs :

while (i < SIZE && scanf("%f",&Arr[i]) == 1)

est la même chose que

while ((i < SIZE) && (scanf("%f", &Arr[i]) == 1))

Donc si i est supérieur ou égal à SIZE, le == est sans importance car il ne sera pas exécuté du tout. Si i est inférieur à SIZE, alors scanf() sera appelé et renverra le nombre d'éléments de la liste d'arguments remplis avec succès. Donc dans votre cas, si cela était égal à 1 (si nous avons obtenu un flottant et l'avons mis dans Arr[i]), alors les conditions sont remplies.

Vous allez donc boucler jusqu'à ce que i devienne plus grand ou égal à SIZE ou si une entrée invalide est saisie dans scanf()

Par exemple, si vous saisissez la lettre "h", votre boucle se terminera car cela ne peut pas être mis dans un spécificateur de flottant, donc scanf() renverra 0.

1voto

Mark Byers Points 318575

La valeur de retour de scanf est le nombre d'éléments de la liste d'arguments remplis avec succès.

Comme il n'y a qu'un seul argument, une valeur de retour de 1 signifie que l'appel a été réussi. Si l'entrée ne peut pas être interprétée comme un nombre à virgule flottante, vous obtiendriez une valeur de retour de 0 à la place.

1voto

KingsIndian Points 26855

scanf retourne le nombre d'éléments lus avec succès :

Depuis la page de manuel :

... les fonctions retournent le nombre d'éléments d'entrée correspondants et assignés avec succès, qui peuvent être moins nombreux que prévu, voire même zéro en cas d'échec de correspondance précoce.

Donc, si l'entrée a été réussie pour une seule valeur flottante, scanf() renverra 1 et la condition sera vraie dans la boucle while pour la deuxième partie de la condition.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X