scanf("%d%d\n",&x,&y);
有人可以解释编译器如何编译代码行并向我解释一下吗?
答案 0 :(得分:5)
有人可以解释编译器如何编译代码行并向我解释一下吗?
scanf
,x
和y
,希望这些未定义,因此这是一个NOP。scanf
,x
和y
与先前声明的符号相匹配。当然这是非常近似的,这个过程有很多变化。
现在,你不明白哪一部分?
答案 1 :(得分:1)
这是对scanf功能的调用。第一个参数是格式%d%d\n
,这意味着“期望两个十进制数后跟一个换行符”。
每个%d
都希望在某处将结果写入内存。 &x
和&y
基本上是指“将其写入x
和y
变量的地址”。
他们是通过地址(&x
)而非价值(x
)传递的,否则scanf
将无法访问真实位置x
并且能够写信给它。
答案 2 :(得分:0)
编译器如何编译
好吧,我现在没有资格参加,但如果你对\n
字符感到困惑,我可以为你解决这个问题。
介于format specifiers之间,如果输入任何字符,则在输入中将其视为分隔符。
scanf("%d%d\n",&x,&y);
这意味着,输入两个nums后,您需要点击return
键才能完成scanf
。
scanf("%d\n%d\n",&x,&y);
这意味着,在输入每个数字后,您需要点击return
键才能完成scanf
。
现在,关于&x, &y
部分:
由于用户输入需要存储到内存中,因此您应该在要存储用户输入的变量中放置address
。
在您的示例中,您希望将第一个num存储到x中;因此你传递了x的地址,即&x
。
我希望你明白这一点。
答案 3 :(得分:0)
将此程序保存为test.c文件
#include <stdio.h>
int main(void){
int x=0,y=0;
scanf("%d%d",&x,&y);
printf("x is %d, y is %d",x,y);
}
编译如
gcc test.c
以
运行./a.out
输入10并按Enter键
再次输入20并按Enter键
输出
x为10,y为20
我认为你在打印这些价值时可能会犯错误
而不是printf("x is %d, y is %d",x,y);
你可能在做什么
printf("x is %d, y is %d");
将为您提供garvase值