输入多行int

时间:2017-09-29 10:17:46

标签: c++ loops

我必须为学校做这个程序我读了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;
}

我想我应该将整个输入/输出事物放在一个循环中,所以我可以多次这样做。但是,我什么时候知道我可以停止接收输入并退出程序?我期待多少输入?我怎么知道输入结束了?

1 个答案:

答案 0 :(得分:-1)

由于程序似乎很快,我想输入也是快速发送的,我会使用超时。

您可以使用文件描述符和select()函数代替cin

查看here及其中的链接。希望它可以成为一个合适的解决方案。

linuxWindows

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;
}