如何将输入格式化为仅接受整数值

时间:2010-04-29 06:47:19

标签: c

输入值123 - 此值为整数且有效

输入值1b23a - 此值无效

如何检测哪些值有效?

这是我的代码:

#include <stdio.h>
#include <conio.h>
void main()
{
    char str1[5],str2[5];
    int num,num1,i;
    num=0;
    clrscr();
    printf("Enter the Number ");
    scanf("%s",str1);
    for(i=0;str1[i]!='\0';i++)
    {
        if(str1[i]>=48&&str1[i]<=56)
            num=num1*10+(str[i]-48);
        else
        {
            printf("The value is invalid ");
        }
    }
    printf("This Number is %d",num);
    getch();
}

3 个答案:

答案 0 :(得分:1)

请参阅this answer regarding use of strtol()。这是一种安全的方式来转换应该是整数的字符串表示形式的任意输入,同时还保存“垃圾”字节以进行其他分析。

使用它,您的代码看起来像这样:

#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#ifdef LINUX_VERSION
#include <curses.h>
#else
#include <conio.h>
#endif

#define BUFF_SIZE 1024

int main(void)
{
    char str1[BUFF_SIZE], *garbage = NULL;
    long num = 0;

    printf("Enter the Number ");
    scanf("%s",str1);

    errno = 0;

    num = strtol(str1, &garbage, 0);
    if (errno) {
       printf("The number is invalid\n");
       return 1;
    }

    printf("You entered the number %ld\n", num);
    if (garbage != NULL) {
        printf("Additional garbage that was ignored is '%s'\n", garbage);
    }
    getch();
    return 0;
}

这并不能解决您发布的所有问题,但它可以帮助您更好地开始。

输出是:

tpost@tpost-desktop:~$ ./t 
Enter the Number 1234abdc 
You entered the number 1234
Additional garbage that was ignored is 'abdc'

编译通过:

gcc -Wall -DLINUX_VERSION -o t t.c -lcurses

我不确定您正在使用什么平台,因此可能需要对代码进行额外修复。

答案 1 :(得分:0)

#include<stdio.h>
#include<conio.h>
void main()
{
char str1[5],str2[5];
int num,num1,i;
num=0;
clrscr();
printf("Enter the Number ");
scanf("%s",str1);
for(i=0;str1[i]!='\0';i++)
if(str1[i]>=48&&str1[i]<=56)
num=num1*10+(str[i]-48);
else
{
printf("The value is invalid ");
}
}
printf("This Number is %d",num);
getch();
}

答案 2 :(得分:-1)

一种方法是使用sscanf并检查该号码后面是否有字符。最简单的方法是在最后添加%c并测试返回代码,如下所示:

const char *yourString = ...;
int theValue, dummy;
if (sscanf(yourString, "%d%c", &theValue, &dummy) == 1) {
    // Was a pure number, parsed into 'theValue'
} else {
    // Either no number or had junk after it
}