首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正在跳过scanf()

正在跳过scanf()
EN

Stack Overflow用户
提问于 2011-03-24 09:02:15
回答 2查看 2.9K关注 0票数 0

我刚开始学习uni的c(通常使用目标c),并且在scanf上遇到了一个奇怪的问题,我有以下代码

代码语言:javascript
复制
   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(),它做了同样的事情。

感谢你所提供的任何帮助。

EN

回答 2

Stack Overflow用户

发布于 2011-03-24 09:10:52

您应该始终检查scanf()的返回值;它会告诉您成功了多少次转换。在这种情况下,如果你不能返回1,你就有问题了。在循环的第一次,scanf()读取一个字符,而不是一个ell (lL),因为您说您得到了一条错误消息。下一次迭代尝试读取换行符或前一个错误字符后面的任何内容,换行符肯定不是ell,其他字符也很可能不是ell,因此至少会产生一条错误消息。对于每个非ell字符,您都会得到一个打印的错误。

通常,如果使用scanf(),很难从错误中恢复。将一行读入缓冲区(字符数组)并使用sscanf()解析它可能会更好。

票数 2
EN

Stack Overflow用户

发布于 2012-11-08 02:02:10

您应该只需要在%c之前添加一个空格。我不确定它为什么有效,但它确实有效。其他数据类型也会发生这种情况。

scanf(" %c",&computerType);替换您的scanf语句

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5413527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档