对于这个部分,我只需要将一个值扫描到一个变量中,然后把它放到一个方程中,然后输出一个数字。
Analogue input (-5V to 5V):
1
e is -1073750280守则:
printf("Analogue input (-5V -5V):\n");
scanf("%d",e);
printf("e is: %d \n", e);当我每次运行程序时,e打印出来的数字随着变化而变化。我想这与记忆有关,但我想不出是什么。
这些是变量声明:
uint16_t *pointer;
int e,d,i;发布于 2014-03-09 20:45:30
C按值传递其所有函数参数,而不是引用。这意味着函数不能直接修改其参数:
void NoChange(int i) {
printf("Before: %d\n", i);
i = 10; // Changes only the local copy of the variable.
printf("After: %d\n", i);
}
main() {
int n = 1;
printf("Start: %d\n", n);
NoChange(n);
printf("End: %d\n", n);
}输出:
Start: 1
Before: 1
After: 10
End: 1如果希望函数更改变量的内容,则需要传递其地址。然后,函数可以修改该地址上的数据,从而有效地修改变量:
void Change(int *i) {
printf("Before: %d\n", *i);
*i = 10; // Changes the memory that i points to.
printf("After: %d\n", *i);
}
main() {
int n = 1;
printf("Start: %d\n", n);
Change(n);
printf("End: %d\n", n);
}输出:
Start: 1
Before: 1
After: 10
End: 10因此,为了使scanf()函数将数据存储在变量中,需要将该变量的地址传递给它,如下所示:
int e;
scanf("%d", &e);发布于 2014-03-09 20:37:17
正如其他人所指出的,scanf("%d", &e);是正确的答案。scanf函数需要一个指向您希望它存储数据的位置的指针,否则它不知道变量在哪里。
由于scanf需要一个指针,所以它将存储在e中的未初始化值转换为指针,并将结果存储在那里。这是一种未定义的行为,你会在C/C++部分中经常看到这个短语,你不应该这么做。
而且,由于scanf没有对您的变量做任何操作,所以printf正在打印未初始化的e值,这就是为什么您要得到意外的结果。
发布于 2014-03-09 20:35:12
scanf("%d",&e);你失踪了。
https://stackoverflow.com/questions/22287747
复制相似问题