【问题标题】:Switch statement accept only int input in C++ [duplicate]Switch 语句只接受 C++ 中的 int 输入 [重复]
【发布时间】:2022-11-28 15:38:06
【问题描述】:

试图制作一个菜单,但让它只接受整数来选择选项,并在用户输入字母时循环返回。

应用程序接口.cpp

#include <iostream>
#include <windows.h>
#include <iomanip>
#include <string>
#include <cstring>
#include <algorithm>
#include <unistd.h>
#include <stdio.h>

using namespace std;

void AppUI::SearchBook()
{
    system("CLS");
    TitleHeader();
    setTxtColor(10);
    PageTitle("Search Book");

    cout << "Search books by:" << endl;
    cout << "1. Title" << endl;
    cout << "2. Author" << endl;
    cout << "3. Publication Date" << endl;
    cout << "4. Publisher" << endl;
    cout << "\n0. Go back to main menu" << endl;
}

编辑本.cpp

#include <iostream>
#include <windows.h>
#include <iomanip>
#include <string>
#include <cstring>
#include <algorithm>
#include <unistd.h>
#include <stdio.h>

using namespace std;

void EditBook::SearchBook()
{
    //variable declarations
    int Opt;
    char searchTxt[255];

    SearchStart:
    UI.SearchBook();
    cout << "\nOption: ";
    cin >> Opt;

    switch(Opt)
    {
        case 0:
            UI.MainMenu();
            break;

        case 1:
            system("CLS");
            cout << "Enter title: ";
            cin.getline(searchTxt,sizeof(searchTxt));
            SearchByTitle(searchTxt);
            break;

        case 2:
            system("CLS");
            cout << "Enter author name: ";
            cin.getline(searchTxt,sizeof(searchTxt));
            SearchByAuthor(searchTxt);
            break;

        case 3:
            system("CLS");
            cout << "Enter publication date: ";
            cin.getline(searchTxt,sizeof(searchTxt));
            SearchByPubDate(searchTxt);
            break;

        case 4:
            system("CLS");
            cout << "Enter publisher: ";
            cin.getline(searchTxt,sizeof(searchTxt));
            SearchByPublisher(searchTxt);
            break;

        default:
            cout << "Invalid option!";
            sleep(1);
            goto SearchStart;
            break;
    }
}

在搜索簿中,当我输入“5”等选项中不可用的数字时,它会循环返回,让我输入正确的选项。但是当我输入一个字母时,例如“a”,它会无限循环,一遍又一遍地显示“无效选项”并且不让我输入新选项。我希望当我输入一个字母时,这是一个无效的选项,它仍然会返回并让我输入正确的字母,这是一个数字/整数。

【问题讨论】:

标签: c++ codeblocks


【解决方案1】:

你想“当用户输入字母时循环”。
所以你想让用户输入字母,以便检测到并做出反应。为此,您需要接受超过 int 作为输入; int Opt;cin &gt;&gt; Opt; 则不会。

您需要的东西可以是整数或字符。
例如。一个字符串。然后解释它并且仅在它可以用作整数时用作整数。

【讨论】:

    【解决方案2】:

    很好地遵循您需要的现有代码

    if (!(cin >> Opt))
    {
        cin.clear();            // clear stream error state
        cin.ignore(100, '
    ');  // ignore any pending input
        goto SearchStart;       // loop back
    }
    

    当然我不推荐使用goto,写一个合适的循环。

    我不想敲自己的答案,但最好的解决方案是 Yunnosch 的,但对于初学者来说,编码可能有点困难。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-05
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      相关资源
      最近更新 更多