papapa2336 发表于 2021-12-14 22:16:43

非法输入咋处理。

我用Switch case语句时,
int i;

        InitFishC();// 初始化数据。
        while (1)
        {
                std::cout << "请选择需要进行的操作: \n";
                std::cout << "1. 打印数据到屏幕\n";
                std::cout << "2. 录入数据\n";
                std::cout << "3. 退出程序\n";
                std::cin >> i;

                switch (i)
                {
                case 1:
                        if (ReadFishC())
                                std::cout << "成功读取文件^_^\n\n";
                        else
                                std::cout << "读取文件失败T_T\n\n";
                        break;
                case 2:
                        RecordFishC();
                        break;
                case 3:
                        return 0;
                }
        }像这种。如果我输入的i= n之类的那些英文字母,它就会死循环。请问怎么才能将非法输入筛选掉。求助大神

人造人 发表于 2021-12-14 22:37:08

#include <iostream>
#include <limits>

int get_integer() {
    int result;
    while(1) {
      if(std::cin >> result) break;
      std::cout << "输入错误,请重新输入!" << std::endl;
      std::cin.clear();
      std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
    return result;
}

int main() {
    std::cout << get_integer() << std::endl;
    return 0;
}

傻眼貓咪 发表于 2021-12-14 22:42:04

      if(isdigit(i) && i < 4){ // 最外层附加条件
            switch (i){
                case 1:
                  if (ReadFishC())
                  std::cout << "成功读取文件^_^\n\n";
                else
                  std::cout << "读取文件失败T_T\n\n";
                  break;
                case 2:
                  RecordFishC();
                  break;
                case 3:
                  return 0;
            }
      }

傻眼貓咪 发表于 2021-12-14 22:42:56

记得 include <cctype>
页: [1]
查看完整版本: 非法输入咋处理。