Invaild输出错误

时间:2016-02-18 15:01:15

标签: c

我需要添加两个数字。这里的约束是我还必须检查输入不是字母表。我使用isdigit()函数来检查这个。但是当我运行代码时,即使输入是数字,它也会执行else块。

#include<stdio.h>
#include<conio.h>
#include<ctype.h>
void main()
{
int a,b,c;
clrscr();
scanf("%d\n",&a);
scanf("%d",&b);
c=a+b;
if(isdigit(a) && isdigit(b))
{
printf("%d",c);
printf("\n");
}
else
{
printf("Inavild Output");
}
getch();
}

3 个答案:

答案 0 :(得分:1)

函数isdigit期望字符的整数表示(它是ascii值)。您正在给出实数整数值,在检查ascii表时,其值可能不是数字。

答案 1 :(得分:0)

首先,如果您想从用户那里获取输入,则需要使用char或string变量。它更加清晰。喜欢:

char input_a;
char input_b;

其次,如果您想要的是添加数字而不是为其添加Ascii表示的结果,则无法直接添加char值。因此,在确保input_a和input_b实际上是数字后,需要完成c = a + b行。

第三,您需要将input_a和input_b转换为它们所代表的值。那么你的&#34;如果&#34;看起来像这样(注意有很多方法可以将char转换为int):

if(isdigit(input_a) && isdigit(input_b))
{
   int a = atoi(input_a);
   int b = atoi(input_b);
   int c = a + b;
   printf("%d",c);
   printf("\n");
}

答案 2 :(得分:0)

  

int isdigit(int argument)将整数参数作为参数并检查   如果是数字,则参数是否为数字,如果是,则返回1(true)   参数不是数字,然后返回0(false)

     

如果您将int a = 65传递给该函数,它会将值转换为   它等效ASCII值并返回结果false(0)。因为   65相当于'A''A'不是数字。

你可以这样检查。if(scanf("%d",&a) == 1 && scanf("%d",&b) == 1)。如果输入为数字,则计算并打印result,如果输入不是数字,则打印Inavild Output.

#include<stdio.h>
#include<conio.h>
void main()
{
int a,b,c;
clrscr();
if(scanf("%d",&a) == 1 && scanf("%d",&b) == 1) //if numbers read condition will be true
{
    c=a+b;
    printf("%d",c);
    printf("\n");
}
else
{
    printf("Inavild Output");
}
getch();
}