为什么在我的大地上我的代码不起作用?预期输出5个提示,但该程序在第一次或第二次scanf之后卡住了。
#include<stdio.h>
int main()
{
int n[5], i, plus = 0, minus = 0;
printf("Enter 5 positive/negative numbers: ");
for (i = 1; i <= 5; i++)
{
scanf("%d", n[i]);
if (n[i] > 0)
{
plus++;
}
else if (n[i] < 0)
{
minus++;
}
}
printf("Total positive numbers: %d", plus);
printf("Total negative numbers: %d", minus);
}
感谢您的帮助。
答案 0 :(得分:0)
很抱歉,scanf
不能那样工作。要写入用户在提示符下键入的值,例如n[i]
,scanf
需要一个<地址>一个地址(位于内存中)。
C是故意初级的,而不是像Python或JavaScript这样的语言。
编写代码的方式最终导致传递垃圾(地址n + i
中包含任何整数值)作为scanf
的参数,并期望机器用该值替换该垃圾。而且它无法做到这一点。
一个恰当的比喻是,如果我要您将在门边找到的任何东西拿走放在架子上,但是我没有告诉您要放在哪个架子上,而是给您当前正在放的东西架子。您可能会问我“您为什么给我这个东西,我把放在门边的东西放在哪个架子上?”。
当您将变量指定为过程的参数时,传递的是包含在为变量分配的空间中的 value ,当然,通常也称为“变量值”。
您需要给scanf
空格的地址进行写入。 n[i]
的地址是使用一元运算符&
获得的,例如&n[i]
或n + i
。