HI
我正在编写一个充当服务器的程序,并且能够通过终端与用户进行交互。如果我从标准输入读取我想要多达140个字符。 如果用户输入的数量超过140,我只想采用前140个字符而忽略其余字符。
我尝试类似下面的代码:
struct timeval timeout;
fd_set readings;
char buf[140];
while (1) {
timeout.tv_sec = 15;
timeout.tv_usec = 0;
FD_ZERO(&readings);
FD_SET(STDIN_FILENO,&readings);
int rv = select(STDIN_FILENO+1,&readings,NULL,NULL,&timeout);
if (rv<0) {
cout << "ERROR select\n";
exit(1);
}
if (rv==0) {
cout << "Still Waiting...\n";
}
else {
cout << "A key was pressed\n";
if (FD_ISSET(STDIN_FILENO,&readings)) {
int num = read(STDIN_FILENO,&buf,140);
buf[num]='\0';
cout << buf << endl;
}
}
}
问题是 - 当我输入140个以上的字符时,会打印前140个字符,但是read()会在下一次迭代中读取剩余的数据并打印出来。 如何清除标准输入以便在下一次迭代中忽略其余数据?
谢谢!!答案 0 :(得分:2)
答案 1 :(得分:1)
几乎唯一的选择是阅读字符并将其丢弃,直到达到行尾。
答案 2 :(得分:0)
读取指针中的所有输入文本,然后提取前140个字符,然后再次删除指针以准备好下一个请求。
答案 3 :(得分:0)
你为什么不这样做:
char buf[256];//what ever
...
int num = read(STDIN_FILENO,&buf,256);
if (num > 140) num = 140;
buf[num]='\0';
cout << buf << endl;