Chinaunix首页 | 论坛 | 博客
  • 博客访问: 37308
  • 博文数量: 4
  • 博客积分: 111
  • 博客等级: 民兵
  • 技术积分: 70
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-16 10:28
文章分类
文章存档

2012年(4)

我的朋友

分类: C/C++

2012-07-05 20:41:15

可通过gets和scanf循环读取一行字符串,但gets会有缓冲区溢出的问题,所以建议采用scanf

可采用如下方式读取
char input[100];
char tmp;
while (1) {
scanf("%[\n]", input);
while (((tmp = getchar()) != '\n') && tmp != EOF);
if (strcmp(input), "END") == 0)
break;
printf("%s\n", input);
}

之前一直采用scanf("%[\n]", input);结果发现stdin中的字符一直没有被取出。当输入一个数据后,scanf将数据取出防止input数组中,stdin中的字符一直存在。若输入:start\n,则printf会一直打印start\n。

通过gdb发现stdin->_IO_read_base中的字符串一直没有被吃掉,所以调用了fflush(stdin),但发现这个语句在linux下不管用,好像windows下编程不用考虑fflush的问题。
然后就通过while (((tmp = getchar()) != '\n') && tmp != EOF);将stdin中的字符读出

补充知识:
%[ ] 会匹配接收到的字符串集, %[\n]表示接收到的字符串集将会以回车作为结尾
阅读(3587) | 评论(0) | 转发(0) |
0

上一篇:Libc中的qsort

下一篇:没有了

给主人留下些什么吧!~~