Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用按位C_C_Bit Manipulation_Scanf - Fatal编程技术网

使用按位C

使用按位C,c,bit-manipulation,scanf,C,Bit Manipulation,Scanf,对于这一部分,我实际上只需要将一个值扫描到一个变量中,然后将它放入一个方程中,然后吐出一个数字 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; i

对于这一部分,我实际上只需要将一个值扫描到一个变量中,然后将它放入一个方程中,然后吐出一个数字

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;
您缺少&。

scanf(“%d”和&e)
是其他人指出的正确答案。
scanf
函数需要一个指针,指向您希望它存储数据的位置,否则它不知道变量在哪里

由于
scanf
需要一个指针,因此它将
e
中存储的未初始化值转换为指针,并将结果存储在那里。这是一种未定义的行为,您将在C/C++部分经常看到这一短语,您不应该这样做


另外,由于
scanf
对变量没有做任何处理,
printf
正在打印
e
的未初始化值,这就是您得到意外结果的原因。

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
Start: 1
Before: 1
After: 10
End: 10
如果希望函数更改变量的内容,则需要传递其地址。然后,该函数可以修改该地址的数据,从而有效地修改变量:

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: 1
Start: 1
Before: 1
After: 10
End: 10
因此,为了让
scanf()
函数将数据存储在变量中,您需要将该变量的地址传递给它,如下所示:

int e;
scanf("%d", &e);

为什么有必要这样做?您必须告诉scanf将读取的值存储在哪里。如前所述,您只需告诉它变量的现有值,这是没有用的。已经好几年没有使用C了,所以我忘记了一些语法。@user334158如果这个答案已经为您解决了,请您将它标记为已接受的答案好吗?强调是什么帮助你解决了你的问题是很重要的,这样其他可能有同样问题的人就可以很快想出该怎么办。哇,我本来不打算那么深入,但现在我觉得我应该这么做+1是,已修复并已注释。非常感谢。使用C++如此多,我完全忘记了与SCANF。