我正在编写一个有趣的程序(不是为了学校),但是我很难弄清楚为什么scanf
函数在每次迭代循环时都没有执行 - 我尝试过使用'for'循环和'while'循环。
我知道,取决于我如何编写scanf
函数(即scanf("%s", &variablename);
与scanf("%99[^\n]s", &variablename);
)会有所不同,但我已经尝试了一切,我感到绝望!
当我对来自scanf
的输入进行printf
检查时,在每次迭代中它只接收一个字符串,因此如果我在第一个输入中输入两个单词,则需要两次迭代才能处理 - 每次一个单词。这是我描述的代码段:
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;
}
}
这段代码的输出结果是:
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!
它只允许我输入一次,我输入了“我们最喜欢的话语”。
scanf("%99[^\n]%*c", useranswer);
- BLUEPIXY[...]
并不是s
指示符的附加项,而是一种独立的格式指示符。%s
读取下一个非空格字符的字符串,而%[^\n]
(不是%s[^\n]
)则读取除\n
以外的任何字符的字符串 -- 因此你的代码只能一次读取一个单词(每个循环) 。 - Dmitri"%s[^\n]"
不是scanf()
的有效格式。建议使用fgets(useranswer, sizeof useranswer, stdin)
替代。 - chux - Reinstate Monicaint x = scanf("%99[^\n]", useranswer);
这个操作可能会导致scanf
返回,因此它不能与丢弃操作合并:scanf("%*[^\n]"); getchar();
前者读取并丢弃超过 99 个字符到'\n'
的任何额外字符,后者读取并丢弃换行本身。再次强调,这两个操作不能合并为一个scanf
调用,因为最左边的操作可能会导致失败,从而意味着其后面的操作不执行。在使用scanf
时要非常小心!知识就是力量,在这种情况下它来自 manpages... - autisticx
...scanf
зҡ„жүӢеҶҢйғЁеҲҶдјҡе‘ҠиҜүжӮЁпјҢеңЁиҝҷз§Қжғ…еҶөдёӢx
еҸҜд»ҘжҳҜEOF
гҖҒ0
жҲ–1
пјҢеҪ“x
дёә1
ж—¶пјҢжӮЁеҫҲеҸҜиғҪеҸӘжғідҪҝз”Ёuseranswer
пјҢеӣ дёәе…¶д»–еҖјеҜ№еә”дәҺиҜ»еҸ–й”ҷиҜҜгҖҒж–Ү件结е°ҫе’Ңз©әеӯ—ж®өгҖӮ - autistic