可通过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) |