#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);
}
这是我用过的代码。 我正在使用代码块进行编译。
答案 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);
// ^
更新:根据您的输入,我猜您使用无效输入进行测试。确保您的输入:a
,b
及其添加c
未超过有效int
值,否则您将注定失败。
作为改进的附注,您可能希望将main()
功能更改为
int main(void) //or int main()
这符合标准推荐的内容,是语言律师中经过深入讨论的话题。请阅读this以获取更多信息。
答案 2 :(得分:1)
始终检查scanf
的返回值。如果标准输入能够被解析为2 int
s,那么你应该是2。请注意,int
的范围可以小到-32767到+32767。考虑使用long
代替?
使用c
中的printf
输出 int
值。不要通过该地址。否则,未定义的行为。有些人可能会建议您输出c
的地址,但是语言标准没有说明这种情况,所以其他任何人都不应这样做。
将功能更改为int main()
。这是语言标准;如果您不提供return 0;
,则会隐式添加a + b
。
最终的复杂性:int
的行为未定义如果超出param(
...
[switch]$fullversion
)
的最小或最大尺寸。理想情况下,你应该防范这一点。但令人惊讶的是,这是一个高级主题!请参阅Add integers safely, and prove the safety。
答案 3 :(得分:0)
printf("the sum of two numbers is%d",&c);
正如您所看到的那样,您正在打印c的地址
'&amp; c'而不是打印实际值。
如果我们看到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。