Только одна цифра в символе - PullRequest
0 голосов
/ 28 февраля 2019

Я запрограммировал функцию, которая должна выполняться только в том случае, если ввод «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 голосов
/ 28 февраля 2019

В результате получается, что zeichen является символом, поэтому вы получаете только один символ.Если вы прочитаете его снова, это даст вам второй символ (в вашем примере это будет 2).

Таким образом, вы можете прочитать строку, проверить, равна ли длина 1, а затем использовать символ zeichen[0].

Вы также можете заменить его на номер (int, long или любой другой тип номера, который вам нравится).Затем вход будет проанализирован как число, так что вы получите 12, как вы ожидаете.

0 голосов
/ 28 февраля 2019

Это всегда один и тот же ответ на подобные вопросы проверки входных данных.Забудьте о том, какими должны быть данные, и просто подумайте, что вводит пользователь.Всегда пользователь просто набирает текст.Так что читайте пользовательский ввод в строку, и только если ввод соответствует тому, что вы ожидаете, преобразуйте его в нужные вам данные.

Так что в вашем случае считайте данные в виде строки

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

Что-то в этом роде в любом случае.Надеюсь, вы поняли, что вы не можете проверить правильность ввода, предполагая, что пользователь собирается ввести что-то правильное.Пользователь может ввести что угодно.

0 голосов
/ 28 февраля 2019

Самое простое будет использовать:

int zeichen;

и

    case 1:
    case 2:
    case 3:
    case 4:

cin будут тогда читать несколько символов и интерпретировать ввод как число, а не как один символ.

Редактировать: Если вы хотите обрабатывать другие входы, то вам следует использовать std::string zeichen.Вам нужно будет использовать if s вместо switch

...