我必须为学校做这个程序我读了3个整理检查一些条件并打印结果。问题是公共测试用例显示的是这样的:(我只是放了一些arbirtary数字)
input: ouput:
1 2 3 1
7 1 2 0
6 2 3 0
其他一些测试用例只显示一行:
input: ouput:
6 1 1 1
因此,有时输入包括单行(单个输出行),有时包含多行(多个输出行)。 代码就像这样简单:
int main(){
int a, b, c;
cin << a << b << c;
if(check(a, b, c)) cout << "1\n";
else cout << "0\n";
return 0;
}
我想我应该将整个输入/输出事物放在一个循环中,所以我可以多次这样做。但是,我什么时候知道我可以停止接收输入并退出程序?我期待多少输入?我怎么知道输入结束了?
答案 0 :(得分:-1)
由于程序似乎很快,我想输入也是快速发送的,我会使用超时。
您可以使用文件描述符和select()
函数代替cin
查看here及其中的链接。希望它可以成为一个合适的解决方案。
的select()
函数文档
Linux的代码示例,受到上述链接的启发(未经测试)
int main() {
while (1) {
fd_set fileDescriptor;
struct timeval tv;
tv.tv_sec = 10; // wait 10 secs
tv.tv_usec = 0;
FD_ZERO( &fileDescriptor ); // reset file descriptor
FD_SET( fileno( stdin ), &fileDescriptor ); // connect the file descriptor to standard input
int result = select( fileno( stdin )+1, &fileDescriptor, NULL, NULL, &tv ); // wait to read a character
if( result > 0 ) {
char c;
read( fileno( stdin ), &c, 1 ); // read only one character
//////////////////////
// here your code:
// take three characters
// (you can use a buffer char* buffer = new char[length] instead of char - remember to delete it with delete[] buffer)
// check if the character is '\n' to divide lines
// check the three characters and write the output
//////////////////////
} if ( result < 0) {
return -1; // select error
} else { // result == 0
break; // timeout expired, no more input supposed
}
}
return 0;
}