【发布时间】:2016-05-18 18:52:34
【问题描述】:
char buf[1024] = {0};
// send a message
if(status == 0) {
while(1) {
printf("Enter message : ");
scanf("%1023[^\n]", buf);
fflush(stdin);
if(strcmp(buf,"quit")==0)
break;
status = write(s, buf, strlen(buf));
fflush(stdout);
memset(buf,0,sizeof buf);
}
}
对于我的 scanf,我想使用空格。但是,如果我运行这部分代码,“输入消息:”将处于无限循环中。
如果我只将 scanf 更改为“%s”,那么它可以正常工作,但我无法接受中间有空格的输入。
任何人都可以帮助发现它是如何抛出无限循环或解决这个问题的任何想法吗?
【问题讨论】:
-
不要使用
fflush(stdin),这是未定义的行为 -
你为什么使用
write和fwrite? -
我猜换行符会留在缓冲区中,因此后续对
scanf的调用会读取零个字符。 -
@user3121023 完美解决方案是
fgets() -
fflush(stdin)与某些平台/编译器一起使用以刷新stdin。然而,C 标准并没有具体说明,而是未定义的行为。它不是便携式的。