Linux,scanf循环,而标准输入已加载
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Linux,scanf循环,而标准输入已加载,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含996字,纯文字阅读大概需要2分钟。
内容图文
![Linux,scanf循环,而标准输入已加载](/upload/InfoBanner/zyjiaocheng/949/7a6ce1c294a54967aaaa9c24c08165bb.jpg)
我在scanf和Linux循环上遇到麻烦.
#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("%s\n", s);
i++;
while((c = getchar()) != '\n' && c != EOF);
}
return EXIT_SUCCESS;
}
如果在shell Linux中,如果我执行这样的文件:
echo "lol" | ./testWhileScanf
那么结果将是这样的:
Here : lol
Here : lol
Here : lol
Here : lol
Here : lol
Here : lol
Here : lol
Here : lol
Here : lol
Here : lol
我不知道为什么会这样,我的代码的一行是冲洗标准输入,没有这种问题.
寻求解决方案,我尝试过:__fpurge,fpurge,fflush
但是没有一个有效.
我只想得到:
Here ? : lol
Here ? :
并等待输入.
我当然在这里想念什么..但是我不知道是什么= /
解决方法:
你打电话时
scanf(" %s", s);
第一次,它将s设置为lol,然后返回1.当您第二次调用它时,没有其他输入,因此scanf返回零而不设置变量.但是,您的代码将忽略scanf的返回值,并始终输出s.
添加支票和休息将解决此问题:
if (scanf(" %254s", s) != 1) break;
注意格式字符串中的大小限制器,它将防止scanf导致缓冲区溢出.
内容总结
以上是互联网集市为您收集整理的Linux,scanf循环,而标准输入已加载全部内容,希望文章能够帮你解决Linux,scanf循环,而标准输入已加载所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。