J'écris un programme pour le fun (pas pour l'école), et j'ai du mal à comprendre pourquoi la fonction scanf
ne s'exécute pas à chaque itération de ma boucle - I ' ve joué avec les boucles 'for' et les boucles 'while'.scanf ne s'exécute pas sur chaque boucle itération
Je sais que selon la façon dont j'écris la fonction scanf
(à savoir scanf("%s", &variablename);
VS scanf("%99[^\n]s", &variablename);
) fait une différence, mais j'ai tout essayé et je suis désespérée!
Quand je fais un printf
contrôle sur mon entrée du scanf
, à chaque itération, il est seulement ASPIRATION une chaîne par itération, donc si j'entre deux mots dans ma première entrée, puis il faut compter deux itérations à traiter - un mot par. Voici le segment de code que je décris:
int main(void){
int tries = 0;
int score = 0;
char question[100];
char useranswer[100];
const char *phrase = {"our favorite saying\0"};
printf("\nQuestion #3 (10 points): What is our secret saying?\n");
sleep(1);
tries = 1;
while (tries<=3){
printf("YOUR ANSWER:");
scanf("%s[^\n]", useranswer);
if(strncmp(useranswer, phrase, 15) != 0){
printf ("Nope, try again!\n");
printf("You have used %d out of 3 tries!\n", tries);
if (tries == 2){
printf("Here's your final hint:xxx...\n");
}
if (tries == 3){
printf("You didn't get it. The answer is: our favorite saying!\n");
}
tries++;
}
if (strncmp(useranswer, phrase, 15) == 0){
printf("Damn, you're good. Well done.\n");
score += 10;
break;
}
}
La sortie de ce code est:
Question #3 (10 points): What is our secret saying?
YOUR ANSWER:our favorite saying
Nope, try again!
You have used 1 out of 3 tries!
YOUR ANSWER:Nope, try again!
You have used 2 out of 3 tries!
Here's your final hint:xxx...
YOUR ANSWER:Nope, try again!
You have used 3 out of 3 tries!
You didn't get it. The answer is: our favorite saying!
(Il ne m'a permis d'entrer une fois, et je typé « notre dicton favori ».
'scanf ("% 99 [^ \ n]% * c ", réponse utilisateur); ' – BLUEPIXY
Le' [...] 'n'est pas un add-on pour le spécificateur' s' ... c'est un spécificateur de format différent en lui-même. '% s' lit la chaîne suivante de caractères non-espaces, et'% [^ \ n] '(* not *'% s [^ \ n] ') lit une chaîne de tous les caractères sauf' \ n' - donc le code que vous venez de lire chaque mot un à la fois (un par boucle). – Dmitri
'"% s [^ \ n] "' n'est pas un format 'scanf()' valide.Suggérer d'utiliser 'fgets (useranser, sizeof useranswer, stdin)' à la place. – chux