以下は、Stroustrup のProgramming: Principles and Practice Using C++の初期の章の 1 つで読んだ内容に基づく方法と、cplusplus.com で Duoas によって提供された回答です。get_int_between()
次のようなことを可能にする関数 を定義します。
int my_variable;
get_int_between(my_variable, min, max, prompt, error_msg);
これにより、プロンプトが表示され、検証され、my_variable に保存されます。
楽しみのためにget_int(my_variable, prompt, error_msg)
、同じことを行いますが、任意の値の整数を許可する関数 も含めました。
#include <iostream>
#include <sstream> // stringstream
void get_int(int& d, std::string prompt, std::string fail);
void get_int_between(int& d, int min, int max, std::string prompt, std::string fail);
int main()
{
int my_number = 1; // initialize my_number
get_int(my_number, "Please enter an integer: ", "Sorry, that's not an integer.\n");
//Do something, e.g.
std::cout << "You entered: " << my_number << "\n";
get_int_between(my_number, 1, 2, "Choose the game type (1 or 2): ", "Sorry, that's not an integer.\n");
//Do something, e.g.:
std::cout << "Let's play Game " << my_number << "!\n";
return 0;
}
void get_int(int& d, std::string prompt, std::string fail)
{
while(1) {
std::cout << prompt;
std::string str;
std::cin >> str;
std::istringstream ss(str);
int val1;
ss >> val1;
if(!ss.eof()) {
std::cout << fail;
continue;
} else {
d = val1;
break;
}
}
}
void get_int_between(int& d, int min, int max, std::string prompt, std::string fail)
{
while(1) {
get_int(d, prompt, fail);
if(d > max || d < min) {
std::cout << "Sorry, your choice is out of range.\n";
continue;
}
break;
}
}