2017-09-29 5 views
0

私は3つのintsを読んで結果を印刷して、私は学校のためにこのプログラムを行う必要があります。intの複数の行を入力してください

だから、
input:  ouput: 
    6 1 1  1 

、時々入力:(私はいくつかのarbirtary数字を入れて)

input:  ouput:  
    1 2 3  1 
    7 1 2  0 
    6 2 3  0 

そして、いくつかの他のテストケースのみ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

の可能性のある重複した[1が入って行われたとき、私は知っていますどのように\ nとcin? (ループ)](https://stackoverflow.com/questions/3888197/how-do-i-know-when-one-is-done-entering-cin-with-n-loop) – wimh

+0

std ::を使用することができます::ループ内でgetline: 'std :: string line; while(std :: getline(std :: cin、line)){パース入力。チェックを行う。 [...]} 'また、入力の正確さに頼らないでください。入力がいくつかの要件を満たしているかどうかを常に確認する必要があります。 – ProXicT

+0

これは可能だとは思わない。私が知っているすべての読書方法は、標準から読み続けるか、または入力を待っています。 stdinには、入力終了を確認するためにチェックできるEOFのような文字はありません。私が考えることは、ほとんどのプログラミング競技会が事前に入力数を提供している理由です。 – gautam1168

答えて

-1

プログラムが速いと思われるので、入力も速く送信されると思うので、タイムアウトを使用します。

あなたが見here、そこにリンクしているファイルディスクリプタ、代わりに

cinselect()機能を使用することができます。それが適切な解決策になることを望みます。

ドキュメンテーション(テストしていません)上記のリンクに触発linuxためselect()機能とLinux用のコードのWindows

例の

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

これは質問への答えを提供しません。批評をしたり、著者の説明を求めるには、投稿の下にコメントを残してください。 - [レビューから](レビュー/低品質の投稿/ 17484884) – zedfoxus

+0

質問は「入力がいくつあるのですか?入力が終わったことをどのように知るのですか?私の(暗黙の)答えは "あなたはタイムアウトでselect()関数を使うことができます"です。それは何が間違っていますか? (私はそれをもっと鮮明にするために答えを編集する) – n3mo

+1

あなたの最近の編集では、明快さを加える良い仕事をした。これをありがとう!あなたが提供したリンクからいくつかの例を取っ​​てより説明的な答えを得ることができますか?そのリンクがなくなると、あなたの答えは将来の読者に役立つだろう。また、あなたが本当にOPを助けようとしていると思うので、私はあなたを落胆させていません。 – zedfoxus

関連する問題