微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Linux,scanf在循环中,而stdin已经加载

我在linux上遇到了scanf和循环的问题。

#include <stdio.h> #include <stdlib.h> #include <stdio_ext.h> int main(int argc,char ** argv){ int i = 0; char s[255]; char c; while(i<10){ printf("Here : "); scanf(" %s",s); printf("%sn",s); i++; while((c = getchar()) != 'n' && c != EOF); } return EXIT_SUCCESS; }

如果在Linux的shell中,如果我这样执行我的文件

echo "lol" | ./testWhileScanf

那么结果将是这样的:

在这里:哈哈

在win32中打开,处理和渲染SVG文件(C ++)

我能始终确定通过findwindowexfind的控件的层级顺序吗?

“SendMessage”为C ++中的3个不同的进程

添加条目DNS客户端parsing器caching,而不使用主机文件

ManagementScope可以用来从Windows发送wbem查询到Linux / MacOS客户端吗? C#

在这里:哈哈

在这里:哈哈

在这里:哈哈

在这里:哈哈

在这里:哈哈

在这里:哈哈

在这里:哈哈

在这里:哈哈

在这里:哈哈

我不知道为什么这是结果,我的代码行是刷新stdin,没有这种问题。

寻求解决scheme我尝试: __fpurge , fpurge , fflush但没有工作。

我只想得到:

这里 ? : 大声笑

这里 ? :

并等待input。 当然,我错过了这里的东西..但我不能确定什么= /

从C ++代码运行Octave函数

C ++将原始audio从22050提高到48000 Hz

/lib/x86_64-linux-gnu/libthread_db.so.1该文件不存在

GCC没有链接库。 它编译,但由此产生的库缺less必要的参考资料

在同一行中打印,并在C中暂停

你打电话时

scanf(" %s",s);

这是第一次,它设置为lol ,并返回1 。 当你第二次调用它时,没有进一步的输入,所以scanf在没有设置变量的情况下返回零。 但是,您的代码会忽略scanf的返回值,并且无论如何都会打印出来。

添加一个检查和break应该可以解决这个问题:

if (scanf(" %254s",s) != 1) break;

注意格式字符串中的大小限制器,它将防止scanf导致缓冲区溢出。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐