C++错误输入的处理--整型错误输入字符串

来源:互联网 发布:老mac安装10.12 编辑:程序博客网 时间:2024/04/30 09:04

  • 无错误处理示例
  • 带错误处理 使用sscanf1
    • 有错误版
    • 修正版

在实际应用时,比如需要输入一定范围内的整数,本文分析如何处理错误的输入数据

无错误处理示例:

#include <iostream>using namespace std;int main(){    int a;    do{        cout << "Input a number: " << endl;        cin >> a;    }while(a<1||a>9);//限制整数a的范围 [1,9]}

这时,如果我们输入字符数据,会导致类似死循环的输出”Input a number: “,程序崩溃


带错误处理: 使用sscanf1

考虑到可以通过字符转换的方式来处理错误数据,得到下面这种解决方法

有错误版

#include <iostream>using namespace std;int main(){    int a;    do{        char temp[100];        cout << "Input a number: " << endl;        cin >> temp;        sscanf(temp,"%d",&a);    }while(a<1||a>9);//限制整数a的范围 [1,9]}

这种方案下,大体上能解决输入为字符串出错的问题,但是忽略了cin函数的用法。
cin在读取字符串的时候是遇到空格停止的,因此这里为了获取一行数据使用cin.getline2

修正版

#include <iostream>using namespace std;int main(){    int a;    do{        char temp[100];        cout << "Input a number: " << endl;        cin.getline(temp,100);        int retnum = sscanf(temp,"%d",&a);    }while(retnum!=1 || a<1 || a>9);//限制整数a的范围 [1,9]}

解决了之前说的问题,同时利用sscanf的返回值进行了判断,应该解决了数字错误输入的问题


  1. 头文件 <stdio.h> or <iostream>
    作用:从字符串中读取指定格式的数据
    用法见示例代码,对于unicode是swscanf函数
    该函数返回值是成功格式化数据的个数 ↩
  2. cin.getline(字符指针(char*),字符个数N(int),结束符(char));
    读满N-1个字符或者遇到结束符停止,默认结束符为’\0’ ↩
0 0
原创粉丝点击