C++ 检查输入变量是否为数值?

例子:
#include<iostream>
using namespace std;
int main()
{
int num;
cin>>num;
if( num 是数字)
cout<<1;
else
cout<<2;
return 0;
}

我的目的是想增强程序的健壮性,因为如果输入num不是数字,程序就崩溃了
...全文
309 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2015-11-12
  • 打赏
  • 举报
回复
引用 7 楼 paschen 的回复:
[quote=引用 6 楼 lm_whales 的回复:] [quote=引用 3 楼 paschen 的回复:] [quote=引用 2 楼 lm_whales 的回复:] 那就直接输入字符串,检查即可 直接按照类型输入,很难检查,尤其是整数,浮点数。
1楼不就是一个简单的实现[/quote] 1 楼 那个于健壮性,不好 因为,没有输入到数据中的字符,依然保留在缓冲区中,第二次输入,依然出错。 健壮性,一般要求出错了,要能够保证,此后还可以继续工作。 第一次错了,第二次不错,依然可以正常工作。 这对于 int,double,无论使用 cin,还是 scanf 都不太好。 除非你,采取措施,清除错误状态。[/quote] 在else里加上: cin.clear(); cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');[/quote]++
paschen 版主 2015-11-12
  • 打赏
  • 举报
回复
另需要包含头文件: #include <iostream> #include <iomanip>
paschen 版主 2015-11-12
  • 打赏
  • 举报
回复
引用 9 楼 The_lastest 的回复:
[quote=引用 6 楼 lm_whales的回复:] [quote=引用 3 楼 paschen 的回复:] [quote=引用 2 楼 lm_whales 的回复:] 那就直接输入字符串,检查即可 直接按照类型输入,很难检查,尤其是整数,浮点数。
1楼不就是一个简单的实现[/quote] 1 楼 那个于健壮性,不好 因为,没有输入到数据中的字符,依然保留在缓冲区中,第二次输入,依然出错。 健壮性,一般要求出错了,要能够保证,此后还可以继续工作。 第一次错了,第二次不错,依然可以正常工作。 这对于 int,double,无论使用 cin,还是 scanf 都不太好。 除非你,采取措施,清除错误状态。[/quote] 怎么清除错误内容?。。。[/quote] 看7楼我回复
  • 打赏
  • 举报
回复
引用 6 楼 lm_whales的回复:
[quote=引用 3 楼 paschen 的回复:] [quote=引用 2 楼 lm_whales 的回复:] 那就直接输入字符串,检查即可 直接按照类型输入,很难检查,尤其是整数,浮点数。
1楼不就是一个简单的实现[/quote] 1 楼 那个于健壮性,不好 因为,没有输入到数据中的字符,依然保留在缓冲区中,第二次输入,依然出错。 健壮性,一般要求出错了,要能够保证,此后还可以继续工作。 第一次错了,第二次不错,依然可以正常工作。 这对于 int,double,无论使用 cin,还是 scanf 都不太好。 除非你,采取措施,清除错误状态。[/quote] 怎么清除错误内容?。。。
赵4老师 2015-11-11
  • 打赏
  • 举报
回复
乍看起来c++的cin、cout、ifstream、ofstream在输入、输出上比c的scanf、printf、fscanf、fprintf、fread、fwrite简单,不用格式控制符! 但是不用格式控制符,输入输出恰好是你期望的格式的时候好说;等到输入输出不是你期望的格式的时候,你就会觉得还是用格式控制符更方便、更靠谱。 摒弃cin、cout、ifstream、ofstream! 使用scanf、printf、fscanf、fprintf、fread、fwrite。
#include <stdio.h>
#include <string.h>
char s[80];
int i;
char c;
int main() {
    while (1) {
        printf("Input a integer:");fflush(stdout);
        rewind(stdin);
        fgets(s,80,stdin);
        if (strlen(s)>10) {
            printf("Input too long(>9)!\n");
            continue;
        }
        if (2==sscanf(s,"%d%c",&i,&c)) {
            if ('\n'==c) {
                printf("%d is a integer.\n",i);
                break;
            }
        }
        if ('\n'==s[strlen(s)-1]) s[strlen(s)-1]=0;
        printf("\"%s\" is NOT a integer!\n",s);
    }
    return 0;
}
#include <stdio.h>
#include <string.h>
char s[80];
double d;
char c;
int main() {
    while (1) {
        printf("Input a double:");fflush(stdout);
        rewind(stdin);
        fgets(s,80,stdin);
        if (strlen(s)>20) {
            printf("Input too long(>20)!\n");
            continue;
        }
        if (2==sscanf(s,"%lf%c",&d,&c)) {
            if ('\n'==c) {
                printf("%lg is a double.\n",d);
                break;
            }
        }
        if ('\n'==s[strlen(s)-1]) s[strlen(s)-1]=0;
        printf("\"%s\" is NOT a double!\n",s);
    }
    return 0;
}
kikiqk 2015-11-11
  • 打赏
  • 举报
回复
用字符的ASCII码检测呗
paschen 版主 2015-11-11
  • 打赏
  • 举报
回复
引用 2 楼 lm_whales 的回复:
那就直接输入字符串,检查即可 直接按照类型输入,很难检查,尤其是整数,浮点数。
1楼不就是一个简单的实现
paschen 版主 2015-11-11
  • 打赏
  • 举报
回复
引用 6 楼 lm_whales 的回复:
[quote=引用 3 楼 paschen 的回复:] [quote=引用 2 楼 lm_whales 的回复:] 那就直接输入字符串,检查即可 直接按照类型输入,很难检查,尤其是整数,浮点数。
1楼不就是一个简单的实现[/quote] 1 楼 那个于健壮性,不好 因为,没有输入到数据中的字符,依然保留在缓冲区中,第二次输入,依然出错。 健壮性,一般要求出错了,要能够保证,此后还可以继续工作。 第一次错了,第二次不错,依然可以正常工作。 这对于 int,double,无论使用 cin,还是 scanf 都不太好。 除非你,采取措施,清除错误状态。[/quote] 在else里加上: cin.clear(); cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
lm_whales 2015-11-11
  • 打赏
  • 举报
回复
引用 3 楼 paschen 的回复:
[quote=引用 2 楼 lm_whales 的回复:] 那就直接输入字符串,检查即可 直接按照类型输入,很难检查,尤其是整数,浮点数。
1楼不就是一个简单的实现[/quote] 1 楼 那个于健壮性,不好 因为,没有输入到数据中的字符,依然保留在缓冲区中,第二次输入,依然出错。 健壮性,一般要求出错了,要能够保证,此后还可以继续工作。 第一次错了,第二次不错,依然可以正常工作。 这对于 int,double,无论使用 cin,还是 scanf 都不太好。 除非你,采取措施,清除错误状态。
lm_whales 2015-11-10
  • 打赏
  • 举报
回复
那就直接输入字符串,检查即可 直接按照类型输入,很难检查,尤其是整数,浮点数。
paschen 版主 2015-11-10
  • 打赏
  • 举报
回复

		int a;
		cin>>a;
		if(cin.good())
		{
			//输入正确
		}
		else
		{
			//输入错误;
		}

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧