2017-03-25 58 views
-2

为什么我得到错误的答案的加法和乘法部分的代码?加法和乘法C语言

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    char x, y, z; 
    printf("Enter the calculation: "); 
    scanf("%c %c %c", &x, &y, &z); 

    int a = (int)x; 
    int b = (int)z; 
} 

问题是在这里:

if(y == '+'){ 
    printf("The answer is %d", a+b); 
} 

在这里:

else if(y == '*'){ 
     printf("The answer is %d", a*b); 
    } 
    else{ 
      printf("Use only +, -, /, * signs"); 
    } 
    return 0; 
} 
+2

'x'和'z'的值是多少?他们不是角色吗?所以如果你使用调试器,你可以很快找到答案。学习使用调试器;这是值得的! (其他用户:让他弄明白,然后学习) –

+0

一般来说,描述当你运行程序时会发生什么 - 它给出了什么“错误答案”? – Svaberg

回答

1

字符X,Y,Z的含义是ASCII字符不是数字。在ASCII,数字0至9由字符“0”到“9”连续地表示。字符“0”的整数值是十进制48,字符“1”是49,依此类推。在linux提示符下键入“man ascii”以查看完整的ASCII字符列表。

所以要将一个'0'转换为一个int值,从它中减去'0',并且你得到0. 因为字符在ASCII表中是连续的,所以对所有10个数字ASCII字符都适用(这是没有意外,它是这样设计的)。注大卫指出:虽然有除了ASCII其他编码,所有编码要求的数字字符是连续的,所以这个数学转换为整数总是工作。

所以,如果您有任何字符ç这是从“0”数值的char“9”,你可以使用

int i = C - '0'; 

你值一个b得到它的数值是错误的,你使用的是铸ASCII字符值转换为int,但你需要减去字符的值,将其转换为0:

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
char x, y, z; 
printf("Enter the calculation: "); 
scanf("%c %c %c", &x, &y, &z); 

// Convert ASCII char to int by subtracting value of char '0' 
int a = x - '0'; 
int b = z - '0'; 

if (y == '+') { 
    printf("The answer is %d", a+b); 
} 
else if(y == '*') { 
    printf("The answer is %d", a*b); 
    } 
else { 
    printf("Use only +, -, /, * signs"); 
    } 
return 0; 
} 

对于字符串转换为整数,美国E在此交here中提到的atoi()函数:

char *myString = "1234"; 
    int myIntVal = atoi(myString); 

这是https://stackoverflow.com/a/868508/6693299

0

xz的值重复的是依赖于实现的整数值,不一定ASCII值。然而,它是由标准要求的'0''9'值在序列上,这样一种解决方案是改变为:

int a = x - '0'; 
int b = z - '0'; 

另一种可能性是使用atoi()函数(或更好,所述strtol()功能,这增加了错误检查功能),以及复合文字从输入字符的字符串构成:

所有的
int a = atoi((char []){x, '\0'}); 
int b = atoi((char []){z, '\0'}); 
2

先了解你正在使用字符变量取用户的输入,然后它们类型转换为整型变量。这种类型转换将导致字符的ASCII码值被复制到这些整型变量中。所以,即使你输入的输入为3 + 2,x将包含值51(ASCII码)和z将包含值50(ASCII码),答案将是101,根据代码是正确的。 对于ASCII代码,请参阅http://ascii.cl/ 此外,还有似乎是正在使用的代码中的小错误(这可能取决于编译器。我用的Turbo C++这给了我错误的变量声明在这如printf任何其他操作后案件)。

#include <stdio.h> 
#include <stdlib.h> 



int main() 
{ 
char x, y, z; 
int a; 
int b; 


printf("Enter the calculation: "); 
scanf("%c %c %c", &x, &y, &z); 

a=(int) x; 
b=(int) z; 

if(y == '+'){ 
printf("The answer is %d", a+b); 
    } 
else if(y == '*'){ 
    printf("The answer is %d", a*b); 
    } 
else{ 
    printf("Use only +, -, /, * signs"); 
    } 

return 0; 
} 

此代码正常工作。如果你仍然想保持相同的代码,那么简单地做到这一点。

int a = x - '0'; 

它会工作。

+1

该标准不要求执行字符集以ASCII编码,并且编码实际上并不总是ASCII。但是,从'0'到'9'这些字符的值需要形成一个连续的序列,因此'a = x - '0'是一个可靠的方法来获得由'x ',不管使用什么编码。 –