首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用scanf()函数时遇到问题

在使用scanf()函数时遇到问题
EN

Stack Overflow用户
提问于 2011-03-19 15:03:06
回答 3查看 389关注 0票数 0

我是C语言的新手,但是我在编写一个接受用户输入的程序时遇到了一些麻烦。这是我遇到问题的一小段代码:

代码语言:javascript
复制
int xPos, yPos;    
while(1)
{
        printf("Enter two integers: ");
        if(scanf("%d %d", &xPos, &yPos) == 2)
        {
            printf("success \n");
        }
        else
        {
            printf("fail");
        }

}

我想要的示例如下:

代码语言:javascript
复制
Enter two integers: 4 4
success
Enter two integers: 13
fail
enter two integers: sda asd
fail

它会一直持续下去

但我得到的是:

代码语言:javascript
复制
Enter two integers: 4 4
success
Enter two integers: 13
5 (it goes onto a new line for me and I have to enter something else to make it keep going) 
fail
Enter two integers: sda asd
Enter two integers:Enter two integers:Enter two integers:Enter two integers:Enter two integers:Enter two integers:Enter two integers:Enter two integers:Enter two integers:Enter two integers:Enter two integers: and on and on.. you get the idea.

有什么关于我哪里做错了的提示吗?我希望一旦按下enter按钮,它就会扫描。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-19 15:08:15

这是因为scanf会一直等到你输入两个整数(除非它得到一个错误或者文件的结尾)。在这种情况下,它不关心是否有换行符,它将丢弃它们并等待另一个整数。

如果您想要处理行,您应该使用fgets获取一行,然后使用sscanf提取整数。

有关从标准输入获取行的安全方法,请参阅this answer。除此之外,将您的scanf (...)转换为sscanf (buffer, ...)只是一个很小的修改。

票数 1
EN

Stack Overflow用户

发布于 2011-03-19 15:07:42

代码语言:javascript
复制
scanf('%d %d'...

不断向内扫描标准,直到它看到它要查找的两个整数。一种解决方案是尝试接受一个字符串,然后使用atoi来查看它的格式是否正确,尽管也可能有更好的解决方案。

票数 0
EN

Stack Overflow用户

发布于 2011-03-19 15:08:42

这是scanf的一个弱点。取而代之的是使用fgets(buf,sizeof buf,stdin)将整行作为文本读取,然后使用sscanf尝试从该行提取值。

如果数据表现良好,也可以使用gets()。但正如有人正确地指出的那样,与gets()一起使用的缓冲区很容易导致严重的缓冲区溢出。

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

https://stackoverflow.com/questions/5360704

复制
相关文章

相似问题

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