当我编译这个小程序而不是显示“num1:7
,num2: 2
”时,
它会显示“num1:-1218690218
,num2:-1217453276
”。我想我没有指定程序应该显示什么,所以它只是给我int范围。
对不起。
#include <stdio.h>
main() {
int num1 = 7, num2 = 2;
printf("num1:%d , num2:%d\n"), num1, num2;
}
编辑:非常感谢你!练习的目的是纠正语法错误,但每当我编译它时,我都没有得到任何警告。这个括号很容易错过。
答案 0 :(得分:7)
您已在 num1
和num2
之前加上右括号,因此它们不会传递给printf
。你需要改变这个:
printf("num1:%d , num2:%d\n"), num1, num2;
到此:
printf("num1:%d , num2:%d\n", num1, num2);
是的,括号是唯一的变化,但这是至关重要的。
答案 1 :(得分:5)
您正在使用逗号运算符而不是函数调用的参数。 printf
将输出垃圾值,但它也可能已崩溃。
所以它应该是:
printf("num1:%d , num2:%d\n", num1, num2);
注意)
- 字符。
答案 2 :(得分:4)
您希望在括号内移动num1
和num2
:
printf("num1:%d , num2:%d\n", num1, num2);
原因是num1
和num2
是printf
函数调用的一部分 - 没有它们,printf
使用来自其他地方的随机数据,给你那些大的负值。
答案 3 :(得分:4)
试试这个:
#include <stdio.h>
main() {
int num1 = 7, num2 = 2;
printf("num1:%d , num2:%d\n", num1, num2);
// ^ num1 and num2 go inside the parentheses
}
答案 4 :(得分:3)
如果这是实际代码,则通过移动paren来修复它。
printf("num1:%d , num2:%d\n", num1, num2);
答案 5 :(得分:2)
我认为你的程序应该更像这样
int main(){
int num1 = 7, num2 = 2;
printf("num1 : %d num2 : %d\n",num1,num2);
}
int main(){
int num1 = 7, num2 = 2;
printf("num1 : %d num2 : %d\n",num1,num2);
}
答案 6 :(得分:1)
使用编译器检查语法类似于pellesc for windows
#include <stdio.h>
int main(){
int num1 = 7, num2 = 2;
printf("num1:%d , num2:%d\n", num1, num2);
return 0;
}
你的printf格式错误,c编辑会告诉你
答案 7 :(得分:1)
正在发生的事情是printf
正在查看与程序正在处理的内存(堆栈)相邻的内存中的数字。当printf
碰巧看到它们时,这些数字是出于其他原因,因此它会打印它们而不是num1
和num2
。正如其他人所指出的,你的论点(num1
和num2
)需要在括号内,以便printf
可以使用它们。
答案 8 :(得分:1)
#include <stdio.h>
int main()
{
//int num1 = 7, num2 = 2; this is static intialisation
//u want it as dynamic u have to use
int num1,num2;
scanf("%d%d",&num1,&num2); //get the values from user
printf("num1:%d , num2:%d\n", num1, num2);
return 0;
}
答案 9 :(得分:0)
您想要的是“使用此格式字符串调用printf
,使用num1
作为替换的第一个值,使用num2
作为替换的第二个值;忽略值printf
返回“。 (printf
通常返回打印的字节数;实际打印是副作用。)
您所写的内容是“使用此格式字符串调用printf
;忽略它返回的值,并评估num1
;忽略该值并评估num2
;忽略该值”。这是未定义的行为:printf
没有给出任何替换值,并且通常会盲目地在内存中找到它期望接收的值(有时会导致崩溃) - 但语言标准说此时,您的程序可以执行字面上的任何操作。是的,这是一种非常危险的语言:)
要将值传递给printf
,它们必须位于括号内,如其他答案所示。