我的c程序给出了相同的计算结果

时间:2018-06-06 08:58:36

标签: c codeblocks

#include <stdio.h>
main()
{
    int a,b,c;
    printf("write two numbers");
    scanf("%d%d", &a,&b);
    c=a+b;
    printf("the sum of two numbers is%d",&c);
}

这是我用过的代码。 我正在使用代码块进行编译。

6 个答案:

答案 0 :(得分:2)

使用printf()时,您正在打印位置而不是c变量的值。移除&以获取c的实际值。

printf("the sum of two numbers is%d",c)

答案 1 :(得分:1)

看看你的printf。您正在使用address-of运算符(&),此运算符给出其操作数的地址。 要打印c的值,您需要更改

printf("the sum of two numbers is%d",&c);

printf("The sum of two numbers is %d", c);
//                                     ^

更新:根据您的输入,我猜您使用无效输入进行测试。确保您的输入:ab及其添加c未超过有效int值,否则您将注定失败。

作为改进的附注,您可能希望将main()功能更改为

int main(void)    //or int main()

这符合标准推荐的内容,是语言律师中经过深入讨论的话题。请阅读this以获取更多信息。

答案 2 :(得分:1)

  1. 始终检查scanf的返回值。如果标准输入能够被解析为2 int s,那么你应该是2。请注意,int的范围可以小到-32767到+32767。考虑使用long代替?

  2. 使用c中的printf 输出 int值。不要通过该地址。否则,未定义的行为。有些人可能会建议您输出c地址,但是语言标准没有说明这种情况,所以其他任何人都不应这样做。

  3. 将功能更改为int main()。这是语言标准;如果您不提供return 0;,则会隐式添加a + b

  4. 最终的复杂性:int的行为未定义如果超出param( ... [switch]$fullversion ) 的最小或最大尺寸。理想情况下,你应该防范这一点。但令人惊讶的是,这是一个高级主题!请参阅Add integers safely, and prove the safety

答案 3 :(得分:0)

  1. printf("the sum of two numbers is%d",&c);  正如您所看到的那样,您正在打印c的地址 '&amp; c'而不是打印实际值。

  2. 如果我们看到printf函数正在使用%d格式说明符来打印'c'的地址。它将为您提供有符号整数值。使用%p打印指针地址。

答案 4 :(得分:0)

&安培;是运算符的地址,用于需要指针的函数。

scanf的签名是:

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

其中......表示需要额外的参数和指针。为什么指向scanf?因为参数是args,而不是args。基本上scanf需要知道变量的类型和大小。否则,例如,如果输入数据是一个很长的长,但你说它是一个int,那么就没有为整数结果保留足够的空间。

但是,printf的签名是:

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

其中......表示包含“值”的其他参数。对于printf,您传递某种类型的值,这是一个out参数。

因此,您将一个指针作为scanf的附加参数传递给printf。

所以改变你的代码:

printf("the sum of two numbers is%d",c);

printf("the sum of two numbers is%d",a + b);

您看到的值是c变量的地址。这可能是任何正积分值 - 并且取决于您的计算机决定存储变量的位置。

答案 5 :(得分:-1)

你看到了scanf行

scanf("%d%d", &a, &b); 

更改为

scanf("%d %d", &a, &b);

在%d之间插入空格char。程序无法区分差异两个输入int。