VijaySue 2022-09-14 21:52 采纳率: 100%
浏览 44
已结题

C++ cin循环输入问题

请问为什么当输入和target不是同一数据类型的值时,cin只执行一次就开始进入死循环。

img

target是整型,我输入一个a,cin.rdstate检测输入流状态:错误,返回一个2,cin.clear清除错误标志,cin.sync清空输入流缓冲区:成功,返回一个0,再次检测输入流状态:无错误,又返回一个0,然后开始一直循环也不执行cin。

img

请问各位我这是缓冲区没成功清空还是什么别的原因?

  • 写回答

3条回答 默认 最新

  • _GX_ 2022-09-14 22:09
    关注

    因为错误输入a一直在输入流中没有被提取,clear()只是重置输入流错误flag,并没有提取a

    如果你需要对用户非法输入进行验证,那么你得先把用户输入按字符串读出来,然后再尝试从字符串里按格式提取数据,如果提取失败,则提示用户输入错误,比如像下面这样

    #include <iostream>
    #include <string>
    #include <sstream>
    
    int main() {
      std::string str;
      while (std::cin >> str) {
        std::istringstream ss(str);
        int n;
        if (ss >> n)
            std::cout << "input number: " << n << '\n';
        else
            std::cerr << "invalid input: " << str << '\n';
      }
      return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月15日
  • 已采纳回答 9月15日
  • 创建了问题 9月14日

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助