【问题标题】:input for array not scanned/missing未扫描/丢失数组的输入
【发布时间】:2018-12-05 16:34:32
【问题描述】:

输入: 8 (2 5 6 9 10 2 7 4) 预期输出: (2 7 9 9 12 5 7 6) 实际输出:(2 7 9 9)

这是我的大学作业,也是我第一次在这里提问。 我不知道为什么,但是 10 个没有扫描,有什么帮助吗?

#include <stdio.h>
int main ()
{
int a = 0, b = 0, c = 0, a_u[a], a_s[a];
printf("jumlah inputan : ");
scanf("%d", &a);

printf("\nmasukkan bilangan : ");

for(b = 0; b < a; b++) {
    scanf("%d", &a_u[b]);
}

printf ("\n");
for(b = 0; b < a; b++) {
    if (b % 3 == 0){
        a_s[b] = a_u[b];
    }
    else if (b % 3 == 1){
        a_s[b] = a_u[b] + 2;
    }
    else if (b % 3 == 2) {
        a_s[b] = a_u[b] + 3;
    }
}

for(b = 0; b < a; b++) {
    printf("%d ", a_s[b]);
}
}

【问题讨论】:

  • 在分配数组a_ua_s之前需要读取a的值! (在您上面的代码中,这些数组的大小为 0 !)
  • 你是对的,谢谢!

标签: c arrays scanf


【解决方案1】:

这里有个问题:

int a = 0, b = 0, c = 0, a_u[a], a_s[a];

您的数组a_ua_s 是可变长度的。可变长度数组不一定是标准 C(您可能至少需要 C99 编译器才能利用该功能)。但我们现在假设您的编译器确实支持它。

更重要的是,您使用了 a 的值(即 0)作为这些数组的大小。

这意味着任何代码访问a_ua_s 都会表现出未定义的行为

【讨论】:

  • VLA 是随 C99 引入的(尽管 gcc 在此之前就已经有了它们)。
【解决方案2】:

看看你的数组。在第 4 行,您定义的 2 个数组 a_ua_s 将具有 "0" 大小,这不是明智之举.这将进一步导致未定义的行为导致执行变化。我不明白这种声明的意义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 2018-04-08
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多