gpt4 book ai didi

c - scanf() 被跳过

转载 作者:太空宇宙 更新时间:2023-11-04 05:45:51 24 4
gpt4 key购买 nike

嗨刚开始为 uni 学习 c(通常使用 objective-c )并遇到了一个奇怪的 scanf 问题,我有以下代码

   while(stringCheck == 0){
scanf("%c",&computerType);
computerType = toupper(computerType);

if ( computerType == 'L') {
/*set stringCheck to 1 so the scanf while loop breaks*/
stringCheck = 1;
counter = 0;
} else {
printf("ERROR\n");
}
}

我打印出“ERROR”然后要求输入(所以它第一次跳过了 scanf 语句)。如果我将它更改为另一个字符串变量,它可以正常工作,它会在第一次停止。

代码的其余部分工作正常,只是它一进入循环就打印出一个令人讨厌的错误。

我试过 getChar() 并且它做了同样的事情。

感谢您提供的任何帮助。

最佳答案

如果它在您第一次进入循环时打印错误,那么输入缓冲区中已经有内容。我保证(假设您的编译器没有脑残)它不会跳过 scanf。您应该通过更改来检查它实际接收到的内容:

printf("ERROR\n");

到:

printf("ERROR, code = %02x\n", computerType);

我建议它是您的程序上次运行该代码时的换行符(您说这是第一次,但不清楚您是不是第一次进入该循环曾经(因为程序已启动)或第一次进入该循环但您在此程序运行之前已经经历过它。

当您第一次输入 LENTER 时,您的代码会拉出 L不会 输入。如果您随后再次调用该代码,它将获得 ENTER 键。

您应该理解并允许实际输入的内容,或者使用安全可靠的输入功能,如 this one .

关于c - scanf() 被跳过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5413527/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com