2013-02-20 65 views
0

我知道这可能是一个非常愚蠢的错误,但我刚开始学习C.我想做一个基本的计算器,并且不断收到有关程序的错误,期望得到一个const char *但我有一个浮动。另外它说最后一个printf命令(我相信第50行)没有正确的语法或正确的格式。再一次,我真的很新,所以很抱歉不满。感谢您的帮助!我的代码如下。我在C程序中遇到了一些错误。请帮助我,无论我做什么错

#include <stdio.h> 

#include <math.h> 

int main() 
{ 
    char firstnum, secondnum, answer; 
    char function; 

    printf("Hello and welcome to my calculator!"); 

    printf("Please input the function you would like to use"); 

    scanf("%c", &function); 

    printf("Now please input the two variables."); 

    scanf("%f", &firstnum); 

    scanf("%f", &secondnum); 

    if (function == '+') 
    { 
     answer = firstnum+secondnum; 
    } 
    else if (function == '-') 
    { 
     answer = firstnum-secondnum; 
    } 
    else if (function == '*') 
    { 
     answer = firstnum*secondnum; 
    } 
    else if (function == '/') 
    { 
     answer = firstnum/secondnum; 
    } 
    else 
    { 
     printf("Sorry that was an incorrect function. The correct inputs are +, -, *, /."); 
    } 

    printf(answer); 

    return 0; 


} 
+1

'answer'需要是'float'或'double',而不是'char'。您正在存储已分配的值,并且'char'只能保存整数值。 'firstnum'和'secondnum'也是一样的。就目前而言,“chars”只能保存值-127-127。如果你想对大于127的数字进行计算,你应该将它们改为“float”或“double”。 – shanet 2013-02-20 05:31:10

+1

@shanet ,你说的不是使用'char'是正确的,但是请不要传播关于范围的神话,根据实现情况,'char'可以比这更多。 – paxdiablo 2013-02-20 05:35:28

+0

最好发布你正在得到的确切错误,而不是让我们通过编译器运行你的代码。这个问题对于经验丰富的程序员来说相当明显,但其他错误可能并不明显。 – shanet 2013-02-20 05:36:20

回答

0

声明你的变量,像这样 -

float firstnum, secondnum, answer; 

,改变过去printf到 -

printf("Answer is: %f", answer); 
0

您的最终printf应该

printf("%f", answer); 

或更好的

printf("Answer : %f \n", answer); 

这是因为printf的声明如下预期

int printf (const char * format, ...); 

第一个参数是所述输出的格式,其余都将被插入的变量。

除此之外,您应该修正其他人指出的数据类型。

3

几件事情:

1)更改行,只要你想使用浮点数

char firstnum, secondnum, answer; 

应该

float firstnum, secondnum, answer; 

2)更改行

printf(answer); 

printf("Answer %f \n", answer); 
0
char firstnum, secondnum, answer; 
: 
scanf("%f", &firstnum); 

这是打算在所有好下场的。您必须将scanf中的数据类型与格式说明符相匹配。

这些变量应该是float类型,但说实话,现在没有真正的理由不使用双打现在的额外范围和精度。在这种情况下,请确保您使用格式说明符%lf

此外,您的最终printf缺少完全的格式说明符,这意味着它将尝试使用answer变量作为说明符。一旦您修正了上述数据类型,应将其更改为:

printf ("%f\n", answer); // %lf for double. 
0

将您的声明更改为printf("%f",answer);

此外,您已声明变量为char s,声明它们为float s。

推荐:

正如你似乎是一个初学者,我对你的建议。尝试缩短程序执行时间并尽量使程序高效。所以,而不是这么多的if---else块,你可能已经使用switch的情况。

+0

这里转换switch语句的性能增益将会不明显。如果有的话,他应该将其转换为switch语句以提高可读性。 – drew212 2013-02-20 05:47:46

+0

@ drew212是的,我知道..但是,我始终相信从一开始就遵循好的做法。 – 2013-02-20 05:50:19