【问题标题】:Learning arrays in CC中的学习数组
【发布时间】:2021-03-05 15:20:28
【问题描述】:

我正在尝试制作一个程序,允许用户插入 5 个数字,定义它们是偶数还是奇数,将它们存储到数组中并打印用户插入到数组中的数字。

这是一个非常简单的程序,我这样做只是为了学习如何使用数组。问题是它不会打印出数组的值。为什么?

int main () {
int list [5];
int i = 0;

while (i < 5) {
    printf("Insert the number\n");
    scanf("%d", &list[i]);
    
    if (i % 2 == 0) {
        printf("Even\n");
    }
    else{
        printf("Odd\n");
    }
    i++;
}

i=0;
while (i < 5){
    printf("%d\n", &list[i]);
    i++;
}
return 0;
}

【问题讨论】:

  • 您是否尝试过在调试器中逐行运行代码,同时监控所有变量的值,以确定您的程序在哪个点停止按预期运行?如果您没有尝试过,那么您可能想阅读以下内容:What is a debugger and how can it help me diagnose problems? 您可能还想阅读以下内容:How to debug small programs?
  • 附带说明:在不检查返回值的情况下使用scanf 是不安全的。有关详细信息,请参阅此页面:A beginners' guide away from scanf()
  • 顺便说一句:如果你写for ( i = 0; i &lt; 5; i++ ),那么你就不需要i = 0i++这行了。这是一种更紧凑的编写方式。但你这样做的方式并没有错。如果您觉得按照自己的方式做这件事更自在,那么在学习语言时这样做并没有错。
  • 关于最后一条评论,我知道这会更容易,但是我的老师没有提出这个话题,因此不允许我们做他还没有解释过的事情。无论如何感谢您的提示
  • 因为您是 Stack Overflow 的新手,并且在没有通知我的情况下回复了我的评论,所以我想指出以下几点:由于您在评论一个不属于我的问题,如果您想让我收到您的评论,它必须包含@AndreasWenzel。您只需输入@ 和前几个字符,自动完成(TAB 键)将为您输入其余字符。否则,我可能不会注意到您的回复(我这次确实注意到了)。

标签: c printf scanf pass-by-reference pass-by-value


【解决方案1】:

不要在printf 语句中使用运算符的地址。

printf("%d\n", &list[i]);

应该是:

printf("%d\n", list[i]);

【讨论】:

  • 虽然你的回答是正确的,但我并不赞成,因为它包含的信息不比你回答前 7 分钟发布的答案更多。
【解决方案2】:

您在函数 printf 的调用中使用了不正确的参数

printf("%d\n", &list[i]);
               ^^^^^^^^

你必须写

printf("%d\n", list[i]);
               ^^^^^^^

也就是说,当你使用函数scanf时,你必须通过引用传递参数

scanf("%d", &list[i]);

在 C 中,通过引用传递意味着通过指向它的指针间接传递参数。

当您使用函数printf 时,按值传递参数就足够了,因为它是输出的值。

【讨论】:

    猜你喜欢
    • 2011-04-27
    • 2023-01-13
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    相关资源
    最近更新 更多