2012-04-19 20 views
1

私は入力をC++を使ってバイナリ形式に変換するプログラムを書こうとしています。しかし、私はそれぞれの追加入力を翻訳し続けているdo-whileループ部分に少し問題があります。 do-whileループの条件が乱れて出力が無限ループになります。終了信号までC++入力の終わりに達した後にdo whileループを終了する

do{ 
    cin>>number; 
    if (number<0) 
     cout<< number<< " (base 10) is not a positive integer"<<endl; 
    else if (number==0) 
     cout<< number<< " (base 10) = 0 (base 2) "; 
    else { 
     binary= binaryConverter(number); 
     cout<< number << " (base 10) ="; 
     cout<< binary << " (base 2)"; 
    } 
    cout<< endl; 
}while(????); 
+6

実際に終了する条件は何ですか?ユーザーが入力を停止したら? – birryree

+1

なぜ人々はこのCのようなものをタグ付けするのですか? – Matt

答えて

3

この意志ループは(CTRL-Cのように)受信し、そのストリームを

while(cin >> number) 
+0

ありがとう! – user1344877

+0

@ user1344877この回答がうまくいく場合は、緑色のチェックマークをクリックして「受け入れ」を検討する必要があります。それはあなたの質問に対する正式に受け入れられる回答であり、victor.tにいくつかの名誉を与えるでしょう。 [回答の受け取りはどうすればよいですか?](http://meta.stackexchange.com/q/5234/154119) – chrisaycock

+0

このようなループは、ファイルの終わりの表示を受け取ったときに正常に終了することにも言及する価値がありますコンソール:CTRL-DまたはCTRL-Z、環境に応じて) –

0

を終了する正規C++入力ループは次のようになります

ItemType item; 
while (input_stream >> item) { 
    // Do something with item, for example: 
    // std::cout << item; or, 
    // container.push_back(item); or, 
    // sum += item; or whatever. 
} 

すなわち一種のループは入力項目ごとに一度だけ実行され、ファイルの終わり(ディスクファイルの終わりであろうとコンソールからのEOFであろうと終わりであろうと)で停止します。また、すぐに入力がもはや項目のフォーマットに適合するように停止します(ItemTypeintで、入力はそれに文字Qを持っている場合、例えば。)

を具体的に、一つは決して使用する必要があります.eof()またはループ条件として.good()。入力ループとしてdo-whileを使用することはほとんどありません。あなたのケースでは

、ループは次のようになります。

while(std::cin >> number) { 
    std::cin>>number; 
    if (number<0) 
    std::cout<< number<< " (base 10) is not a positive integer"; 
    else if (number==0) 
    std::cout<< number<< " (base 10) = 0 (base 2) "; 
    else { 
    binary= binaryConverter(number); 
    std::cout<< number << " (base 10) ="; 
    std::cout<< binary << " (base 2)"; 
    } 
    std::cout<< "\n"; 
} 

P.S.あなたのコードを他の2つの広く採用されている標準に準拠するように修正しました。と決して言わず、'\n'というときはstd::endlと決して言いません。

関連する問題