C语言判断输入是否符合要求

输入一串东西,除了正整数之外的全都算错,要判断出对不对,不对的话要可以重新输入直到正确为止,输入的符合要求的正整数之后要参与运算,求解该如何判断QAQ
比如0、负数、小数、字母、汉字、标点之类的全都判断为不符合要求

第1个回答  2013-09-18
用字符串输入,判断是否在0~9之间,如果不在则重新输入
最后转换为正整数
int a[100],s=0,flag;
do{
gets(a);
flag=0;
for(i=0;a[i];i++)
if(!(a[i]>='0'&&a[i]<='9'))
{
flag=1;
break;
}
}while(flag==0)
上面是判断是否符合条件
下面是组合字符串为int
for(i=strlen(a);i>=0;i--)
s=s*10+a[i]-48;
第2个回答  推荐于2018-04-04
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int check_integer(const char* s) {
    int r = 0;
    while (*s) {
        if (isdigit(*s)) {
            r = r * 10 + (*s - '0');
        } else {
            r = 0;
            break;
        }
        s++;
    }
    return r;
}

int input_integer() {
    char s[100];
    int r;
    while (1) {
        scanf("%s", s);
        r = check_integer(s);
        if (r > 0) return r;
    }
}

int main()
{
    printf("%d\n", input_integer());
return 0;
}

追问

scanf("%s", s);的时候是不是自动先把s[100]清空了再输入的?我对这里不太清楚,不知道会不会存在第二次比第一次输入的字符串短而使得第一次输入的字符留下参与第二次判断的问题。。。

追答

不会清空,也不会混淆的。因为字符串是用末尾的0作为结束标志,第二个输入的时候,将输入的字符从起始位置开始存入字符数组,然后在末尾加上0,如果第一次输入的比第二次输入的长,是会在第二次输入的末尾0后面留下来的,但不会影响使用,因为第二次处理的时候都是到0就结束了。

追问

是指'\0'吗?

追答

是的,'\0'就是0

本回答被提问者和网友采纳
第3个回答  2013-09-18

是这样输入的要求吗

第4个回答  2013-09-18
正则表达式吧,一句话搞定,然后atoi就转换成int了
第5个回答  2013-09-18
isdigit()c语言自带函数
相似回答