无法在C中产生所需的输出,循环和数组

时间:2018-11-12 14:30:34

标签: c arrays loops

为什么在我的大地上我的代码不起作用?预期输出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);
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

很抱歉,scanf不能那样工作。要写入用户在提示符下键入的值,例如n[i]scanf需要一个<地址>一个地址(位于内存中)。

在这方面,

C是故意初级的,而不是像Python或JavaScript这样的语言。

编写代码的方式最终导致传递垃圾(地址n + i中包含任何整数值)作为scanf的参数,并期望机器用该值替换该垃圾。而且它无法做到这一点。

一个恰当的比喻是,如果我要您将在门边找到的任何东西拿走放在架子上,但是我没有告诉您要放在哪个架子上,而是给您当前正在放的东西架子。您可能会问我“您为什么给我这个东西,我把放在门边的东西放在哪个架子上?”。

当您将变量指定为过程的参数时,传递的是包含在为变量分配的空间中的 value ,当然,通常也称为“变量值”。

您需要给scanf空格的地址进行写入。 n[i]的地址是使用一元运算符&获得的,例如&n[i]n + i