标准输入流案例

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输入错误后,可以重置标志位,但无法重新输入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值