6

ユーザーに入力を求めるときに「デフォルト値」を使用する方法がわかりません。ユーザーが Enter キーを押すだけでデフォルト値を取得できるようにしたい。次のコードを考えてみてください。

int number;
cout << "Please give a number [default = 20]: ";
cin >> number;

if(???) {
// The user hasn't given any input, he/she has just 
// pressed Enter
number = 20;

}
while(!cin) {

// Error handling goes here
// ...
}
cout << "The number is: " << number << endl;
4

4 に答える 4

14

std::getlineからテキスト行を読み取るために使用しますstd::cin。行が空の場合は、デフォルト値を使用してください。それ以外の場合は、a を使用しstd::istringstreamて、指定された文字列を数値に変換します。この変換が失敗した場合、デフォルト値が使用されます。

サンプルプログラムは次のとおりです。

#include <iostream>
#include <sstream>
#include <string>

using namespace std;

int main()
{
    std::cout << "Please give a number [default = 20]: ";

    int number = 20;
    std::string input;
    std::getline( std::cin, input );
    if ( !input.empty() ) {
        std::istringstream stream( input );
        stream >> number;
    }

    std::cout << number;
}
于 2012-04-25T11:48:59.600 に答える
12

これは、受け入れられた回答の代わりとして機能します。私はstd::getlineやり過ぎの側に少しあると思います。

#include <iostream>

int main() {
    int number = 0;

    if (std::cin.peek() == '\n') { //check if next character is newline
        number = 20; //and assign the default
    } else if (!(std::cin >> number)) { //be sure to handle invalid input
        std::cout << "Invalid input.\n";
        //error handling
    }

    std::cout << "Number: " << number << '\n';    
}

これは、3 つの異なる実行と入力を含むライブ サンプルです。

于 2012-04-25T11:49:45.237 に答える
0
if(!cin)
   cout << "No number was given.";
else
   cout << "Number " << cin << " was given.";
于 2012-04-25T11:35:59.340 に答える
0

を使用して行を文字列として読みたくなりますgetline()。そうすれば、(おそらく)変換プロセスをより詳細に制御できます。

int number(20);
string numStr;
cout << "Please give a number [default = " << number << "]: ";
getline(cin, numStr);
number = ( numStr.empty() ) ? number : strtol( numStr.c_str(), NULL, 0);
cout << number << endl;
于 2012-04-25T11:49:14.767 に答える