我编写了一个仅在输入为“ 1”,“ 2”,“ 3”或“ 4”的情况下执行的功能。所以如果我输入5它说“错了,再试一次”。 我的问题是,如果我键入例如。 “ 12”仍然继续运行,不仅如此,它还将“ 1”放入程序的第一个cin >>,并将“ 2”放入下一个cin >>。我怎么能告诉他“ 12”也不对,而只有“ 1、2、3和4”呢?
这是我的功能
char zeichen;
void operation()
{
bool beginn = false;
do
{
cout << "----- Geben Sie hier den Operator ein, mit welchem Sie rechnen wollen -----" << endl;
cout << "___________________________________________________________________________" << endl << endl;
cout << " | 1 | Addition" << endl;
cout << " | 2 | Subtraktion" << endl;
cout << " | 3 | Multiplikation" << endl;
cout << " | 4 | Division; inklusive Rest" << endl;
cout << "___________________________________________________________________________" << endl << endl << endl;
cout << "Ihre Auswahl: ";
cin >> zeichen;
switch(zeichen)
{
case '1':
case '2':
case '3':
case '4':
beginn = true;
break;
default:
cout << endl << "Ihre Angabe ist nicht richtig. Bitte geben Sie eine der gegebenen Ziffern ein." << endl << endl;
system("PAUSE");
break;
}
system ("CLS");
}
while (beginn == false);
}
这是我的主程序,它被调用了(只是其中的一部分)
#include <iostream>
#include "conversions.h"
#include "rechnung.h"
#include "menue.h"
#include <string>
using namespace std;
int rechnung()
{
unsigned int basis;
string eingabe1;
string eingabe2;
//unsigned int eingabe;
//unsigned int rest = 0;
char again = 'Y';
while (again == 'Y')
{
operation();
system ("CLS");
cout << "Nun geben Sie die Basis des Zahlensystems ein, in welchem Sie rechnen möchten" << endl;
cin >> basis;
cout << endl << "Sie rechnen nun im " << basis << "er Zahlensystem" << endl << endl;
system ("CLS");
cout << "Geben Sie bitte Ihre zwei Zahlen ein, mit denen Sie rechnen möchten" << endl;
cout << " 1. Zahl: ";
cin >> eingabe1;
cout << endl << "2. Zahl: ";
cin >> eingabe2;
cout << endl;
答案 0 :(得分:5)
最简单的方法是使用:
int zeichen;
和
case 1:
case 2:
case 3:
case 4:
cin
然后将读取多个字符并将输入解释为数字,而不是单个字符。
编辑:如果要处理其他输入,则应使用std::string zeichen
。您将使用if
而不是switch
答案 1 :(得分:0)
发生的情况是zeichen
是一个字符,因此您只能得到一个字符。
如果您再次阅读它,它将给您第二个字符(在您的示例中为2)。
因此,您可以读取字符串,检查长度是否为1,然后使用zeichen[0]
字符。
您也可以将其替换为数字(int,long或您喜欢的任何其他数字类型)。然后输入将被解析为数字,这样您将获得12的期望值。
答案 2 :(得分:0)
对于这类输入验证问题,答案总是相同的。忘记您想要的数据是什么,只考虑用户键入什么即可。用户总是只键入文本。因此,将用户输入读取为字符串,并且仅在输入符合您的期望时才将其转换为所需的数据。
因此,在您的情况下,请以字符串形式读取数据
cout << "Ihre Auswahl: ";
string input;
cin >> input;
检查输入是否是您想要的
if (input != "1" && input != "2" && input != "3" && input != "4")
{
cout << endl << "Ihre Angabe ist nicht richtig. Bitte geben Sie eine der gegebenen Ziffern ein." << endl << endl;
system("PAUSE");
}
仅当您需要输入时,才将其转换为字符
else
{
char zeichen = input[0];
switch (zeichen)
{
case '1':
...
case '2':
...
case '3':
...
case '4':
...
}
}
反正就是这样。希望您能理解,您无法通过假设用户将输入正确的内容来检查输入是否正确。用户可以输入任何内容。