10.1 判断用户输入的是字符串还是数字 利用偷窥 或者 放回
10.2 让用户输入指定范围内的数字,如果不正确 重新输入
10.2.1 cin.fail() 看标志位 0正常 1不正常
10.2.2 cin.clear()重置标志位
10.2.3 cin.syne() 清空缓冲区
案例1 判断用户的是字符串 还是数字
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
#include <ctype.h> //isdigit()函数的头文件
using namespace std;
方法一:偷窥
void test01() {
cout << "请输入一串数字或者字符串:";
char c = cin.peek();
if (c >= 0 && c < 10) {
int num;
cin >> num;
cout << "输入的是数字" << num << endl;
}
else {
char buf[1024];
cin >> buf;
cout << "输入的是字符串" << buf << endl;
}
}
方法二:放回
void test02() {
while (true) {
cout << "请输入一串数字或者字符串:" ;
char c = cin.get();
cin.putback(c);
if (isdigit(c)) {
int num;
cin >> num;
cin.ignore(100, '\n');
cout << "输入的是数字:" << num << endl;
}
else {
char buf[1024];
cin.getline(buf, 1024);
cout << "输入的是字符串:" << buf << endl;
}
}
}
ps:输入字符串的第一个字符是数字时,判断结果有误,可能和isdigit()函数有关
案例2 让用户输入 1 到~10 的数字 ,如果输入有误 重新输入
void test03() {
int num;
cout << "请输入一个1到10的数字:" ;
while (true) {
cin >> num;
if (num > 0 && num < 10) {
cout << "输入的数字为" << num << endl;
break;
}
cin.clear();//重置标志位
cin.sync(); //清空缓冲区
cout << "标志位: " << cin.fail() << endl;
}
}
ps:案例2输入错误后,可以重置标志位,但无法重新输入