我刚开始学习uni的c(通常使用目标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语句)。如果我将it更改为另一个变量,即字符串,它就可以正常工作,第一次就会停止。
代码的其余部分运行得很好,只是它一进入循环就打印一个错误,这很烦人。
我已经尝试过getChar(),它做了同样的事情。
感谢你所提供的任何帮助。
发布于 2011-03-24 09:10:52
您应该始终检查scanf()的返回值;它会告诉您成功了多少次转换。在这种情况下,如果你不能返回1,你就有问题了。在循环的第一次,scanf()读取一个字符,而不是一个ell (l或L),因为您说您得到了一条错误消息。下一次迭代尝试读取换行符或前一个错误字符后面的任何内容,换行符肯定不是ell,其他字符也很可能不是ell,因此至少会产生一条错误消息。对于每个非ell字符,您都会得到一个打印的错误。
通常,如果使用scanf(),很难从错误中恢复。将一行读入缓冲区(字符数组)并使用sscanf()解析它可能会更好。
发布于 2012-11-08 02:02:10
您应该只需要在%c之前添加一个空格。我不确定它为什么有效,但它确实有效。其他数据类型也会发生这种情况。
用scanf(" %c",&computerType);替换您的scanf语句
https://stackoverflow.com/questions/5413527
复制相似问题