鱼C论坛

 找回密码
 立即注册
查看: 2035|回复: 5

[已解决]输入cin进入死循环问题

[复制链接]
发表于 2023-3-13 17:03:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<iostream>
using namespace std;

int main()
{   
    int select = 0;
   
      
    while (1)
    {
        cout << "输入" << endl;
        cin >> select;
    }
cin输入字符就会变成死循环
把输出cout注释掉就不会

   
     
        
   
   
   



}
最佳答案
2023-3-13 17:07:37
这个问题可能是因为当cin输入的不是整数时,会出现错误并将输入流标记为错误,导致下次输入时无法读取正确的值。

为了解决这个问题,你可以在输入之前进行一些检查,例如判断输入是否为整数,如果不是,清空输入流并忽略该输入。可以尝试修改您的代码如下:

  1. #include <iostream>
  2. #include <limits> // 需要引入limits库

  3. using namespace std;

  4. int main() {
  5. int select = 0;

  6. while (true) {
  7.     cout << "请输入一个整数:" << endl;
  8.     if (cin >> select) {
  9.         // 输入成功
  10.         break;  // 退出循环
  11.     } else {
  12.         // 输入失败
  13.         cout << "无效输入,请输入一个整数。" << endl;
  14.         cin.clear();  // 清空输入流
  15.         cin.ignore(numeric_limits<streamsize>::max(), '\n');  // 忽略当前输入行
  16.     }
  17. }

  18. cout << "你输入的整数是:" << select << endl;

  19. return 0;
  20. }
复制代码

这样就可以避免cin输入字符导致死循环的问题了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-3-13 17:07:37 | 显示全部楼层    本楼为最佳答案   
这个问题可能是因为当cin输入的不是整数时,会出现错误并将输入流标记为错误,导致下次输入时无法读取正确的值。

为了解决这个问题,你可以在输入之前进行一些检查,例如判断输入是否为整数,如果不是,清空输入流并忽略该输入。可以尝试修改您的代码如下:

  1. #include <iostream>
  2. #include <limits> // 需要引入limits库

  3. using namespace std;

  4. int main() {
  5. int select = 0;

  6. while (true) {
  7.     cout << "请输入一个整数:" << endl;
  8.     if (cin >> select) {
  9.         // 输入成功
  10.         break;  // 退出循环
  11.     } else {
  12.         // 输入失败
  13.         cout << "无效输入,请输入一个整数。" << endl;
  14.         cin.clear();  // 清空输入流
  15.         cin.ignore(numeric_limits<streamsize>::max(), '\n');  // 忽略当前输入行
  16.     }
  17. }

  18. cout << "你输入的整数是:" << select << endl;

  19. return 0;
  20. }
复制代码

这样就可以避免cin输入字符导致死循环的问题了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-3-13 19:07:17 | 显示全部楼层
正如楼上所说的,因为输入的内容是 int,所以就死循环,唯一解决办法(指满足楼主愿意)就是改为 string,string 遇到数字也会默认他是字符:

  1. #include<iostream>
  2. #include<string>
  3. using namespace std;

  4. int main()
  5. {   
  6.         string select;
  7.    
  8.       
  9.     while (1)
  10.     {
  11.         cout << "输入" << endl;
  12.         cin >> select;
  13.     }
  14. }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-3-13 19:09:42 | 显示全部楼层
这里的去掉cout不会循环是不完全对的,应该是不会循环输出了,因为cin读不到一个合法数字,就跳过了,就这样,一直跳过,输出,跳过,输出,不管去掉不去掉都是在死循环
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-3-13 22:35:14 | 显示全部楼层
本帖最后由 jhq999 于 2023-3-13 23:02 编辑
  1. int main()
  2. {
  3.      int select = 0;

  4.     while (1)
  5.     {
  6.         cout << "输入" << endl;
  7.         cin >> select;
  8.         if(cin.fail())cin.clear(),cin.ignore();
  9.         else cout<<select<<endl;

  10.     }
  11.     return 0;
  12. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-3-18 08:35:54 | 显示全部楼层
解法很多,楼主自己看喜欢哪一个
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 17:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表