加法和乘法C语言

时间:2017-03-25 14:16:18

标签: c multiplication addition

为什么我在此代码中的加法和乘法部分得到了错误的答案?

#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;
}

3 个答案:

答案 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 :(得分:1)

字符x,y,z的值是ASCII字符而不是数字。在ASCII中,数字0到9由字符&#39; 0&#39;表示。通过&#39; 9&#39;连续。字符&#39; 0&#39;的int值是十进制48,字符&#39; 1&#39;是49,依此类推。键入&#34; man ascii&#34;从linux提示符中查看ASCII字符的完整列表。

所以转换&#39; 0&#39;到一个int值,减去&#39; 0&#39;从它,你得到0。 因为字符在ASCII表中是连续的,所以这适用于所有10个数字ASCII字符(这不是偶然的,它是以这种方式设计的)。请注意,David指出:虽然除了ASCII之外还有其他编码,但所有编码都要求数字字符是连续的,因此转换为整数的数学运算始终有效。

因此,如果你有任何一个char C,它是来自&#39; 0&#39;的数字字符。到&#39; 9&#39;,你可以使用

获取它的数值
int i = C - '0'; 

a b 的值是错误的,您是使用强制转换将ASCII字符值转换为int,但您需要通过减去该值来转换它角色&#39; 0&#39;:

#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;
}

要将字符串转换为整数,请使用此帖here中提到的atoi()函数:

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

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

的副本

答案 2 :(得分: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'});