【问题标题】:How do I get input for an array from a user in C programming?如何在 C 编程中从用户那里获取数组的输入?
【发布时间】:2020-04-29 07:24:27
【问题描述】:

我是 C 新手,在用户输入数组时遇到了一些问题。

这里是代码

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int n, i;
    int score [n];
    printf("Number of scores: ");
    scanf("%d", &n);
    for(i=0; i<n; i++){
       printf("score: ");
       scanf("%d", &score[i]);
    }
    return 0;
}

我为 n 设置的值无关紧要。它总是提示用户 4 次。

【问题讨论】:

  • 您注意到 n 未初始化吗? score[n] 数组应该有多大?
  • 如果在没有初始化的情况下使用变量,一些编译器会打印警告。您应该尽可能打开警告。

标签: c arrays input


【解决方案1】:

如 cmets 中所述,您必须更改此内容:

/* bad */
int score [n];
printf("Number of scores: ");
scanf("%d", &n);

进入这个

/* good */
printf("Number of scores: ");
scanf("%d", &n);
int score [n];

这是因为 C 从上到下执行代码,就像在阅读书籍时一样。一旦用户输入它,它就不会在上面的几行“加倍”并填写n。在您声明int score [n] 时,必须已经知道n

【讨论】:

  • 除非 C 的语法最近发生了变化,否则这是不正确的。对于在输入函数时不知道大小的情况下分配数组,您必须使用malloc() 分配它。
  • @PierreFrançois 除了引入此功能(可变长度数组)的 1999 年不是“最近”,而是 21 年前。是时候重新学习 C 语言了:语言在 1995 年、1999 年、2011 年和 2017 年进行了修订。
  • 非常感谢伦丁。这确实是一个宝贵的教训。
【解决方案2】:

如果您在编译期间使用大小未知的数组,我建议您使用内存分配。所以用户在运行程序时确定数组大小。

#include  <stdio.h>
#include <stdlib.h>

int main(void)
{
    int n, i;
    int *score;
    printf("Number of scores: ");
    scanf("%d", &n);

    score = (int *)malloc(sizeof(int)*n);

    for(i=0; i<n; i++){
       printf("score: ");
       scanf("%d", &score[i]);
    }
    free(score)
    return 0;
}

malloc 函数分配大小为n 的内存,并返回一个指向已分配内存的指针。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    相关资源
    最近更新 更多