字符中只有一位

时间:2019-02-28 14:27:40

标签: c++ function char

我编写了一个仅在输入为“ 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;

3 个答案:

答案 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':
        ...
    }
}

反正就是这样。希望您能理解,您无法通过假设用户将输入正确的内容来检查输入是否正确。用户可以输入任何内容。