PYTHON_bai_xvan 2024-06-30 17:13 采纳率: 80%
浏览 3
已结题

c++ 关于cin的一些问题



```c++
#include <iostream>
#include <windows.h>
#include "numbers.cpp"
using namespace std;
using math_methods::my_int_add;

int pause() {
    system("pause");
    return 0;
}


int main() {
    int a, b, n;

    for (;;){
        cout << "第一个加数: ";
        cin >> a;
        cout << "第二个加数: ";
        cin >> b;
        cout << "和: " << my_int_add(a, b) << "\n";
    }
    pause();
    return 0;
}


初学者
为什么我的程序一输入字母就无限循环?
numbers.cpp 如下:

```c++
namespace numbers {  // 0~10 的数字
    const int one = 1, two = 2, three = 3, four = 4,
              five = 5, six = 6, seven = 7, eight = 8,
              nine = 9, zero = 0, ten = 10;
}

namespace math_methods {  // 我自己定义的加减乘除法

    int my_int_add (int a, int b) {
        return a + b;
    }

    int my_int_sub (int a, int b) {
        return a - b;
    }

    int my_int_mul (int a, int b) {
        return a * b;
    }

    int my_int_div (int a, int b) {
        return a / b;
    }
}

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2024-06-30 17:13
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    你好!看起来你遇到的问题是当程序尝试从 cin 读取一个整数时,如果输入了非数字字符,cin 会进入一个错误状态。在C++中,cin 会默认地在遇到非法输入时停止读取,并且不会自动恢复到正常状态。这就是为什么你的程序在输入字母后会进入无限循环的原因。

    要解决这个问题,你可以在读取输入后检查 cin 的状态,并在发现错误时清除错误状态并提示用户重新输入。下面是一个修改后的代码示例,展示了如何实现这一点:

    #include <iostream>
    #include <limits> // 引入limits头文件,用于定义数值的极限
    #include "numbers.cpp"
    using namespace std;
    using math_methods::my_int_add;
    
    int pause() {
        system("pause");
        return 0;
    }
    
    int main() {
        int a, b;
        char input[256]; // 定义一个字符数组用于读取输入
    
        for (;;){
            cout << "第一个加数: ";
            cin.getline(input, 256); // 使用getline读取一行输入
    
            // 检查输入是否为数字
            if (sscanf(input, "%d", &a) != 1) {
                cout << "输入错误,请输入一个整数。\n";
                continue; // 如果输入错误,继续下一次循环
            }
    
            cout << "第二个加数: ";
            cin.getline(input, 256); // 再次使用getline读取输入
    
            if (sscanf(input, "%d", &b) != 1) {
                cout << "输入错误,请输入一个整数。\n";
                continue; // 如果输入错误,继续下一次循环
            }
    
            cout << "和: " << my_int_add(a, b) << "\n";
        }
        pause();
        return 0;
    }
    

    在这个修改后的代码中,我使用了 getline 函数来读取一行输入,然后使用 sscanf 函数尝试将输入转换为整数。如果 sscanf 返回的值不是1(表示成功转换),则说明输入不是整数,程序会打印错误消息并使用 continue 跳过当前循环,提示用户重新输入。

    请注意,我移除了原始代码中的无限循环检查,因为 getline 可以处理多行输入,包括非数字字符。此外,sscanf 函数提供了一种检查输入是否为期望格式的方法。

    希望这能帮助你解决问题!如果你需要更多帮助或有其他问题,请随时告诉我。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月8日
  • 已采纳回答 6月30日
  • 创建了问题 6月30日

悬赏问题

  • ¥15 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。
  • ¥20 网站后台使用极速模式非常的卡
  • ¥20 Keil uVision5创建project没反应
  • ¥15 mmseqs内存报错
  • ¥15 vika文档如何与obsidian同步
  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置
  • ¥15 sentaurus lithography
  • ¥100 求抖音ck号 或者提ck教程
  • ¥15 关于#linux#的问题:子进程1等待子进程A、B退出后退出(语言-c语言)