使用 fgets 将数据存储到数组中

Storing data with fgets into Arrays

我是一名刚接触编程的学生,所以如果我的问题可能被视为愚蠢且有点混乱,我深表歉意。所以我的问题是我必须创建一个程序,用户可以通过该程序插入一堆数字(我们使用 fgets),最后,他会打印出他之前输入的所有数字。现在,我实际上从老师那里得到了指导,但我不知道如何将数字存储在数组中,以便以后可以使用它们。我会留下老师提供的代码(我不是要别人给我做作业,我只是在找人向我解释代码的实际含义,以便我自己使用它) 我个人认为,有一些问题(但可能只是我了解的不多):

我真的很困惑,但回到我原来的问题,如果可能的话,我想更好地理解这样的东西 array[variable] 是如何工作的,或者如果它可能的话。

非常感谢您。

#include <stdio.h>

#define MINNUM 18
#define MAXNUM 30
#define NNUM   (MAXNUM - MINNUM + 1)
#define NMAX    100

int main() {
    char s[80];
    int n;
    int nums[NMAX];
    int i, num;

    /* input */
    fgets(s, sizeof(s), stdin);
    n = atoi(s);

    /* if n <= 0 print and error message and exit */
    if (n <= 0 || n > NMAX) {
        printf("[ERROR]\n");
        
        return 0;
    }

    /* read only the allowed numbers */
    i = 0;
    do {
        fgets(s, sizeof(s), stdin);
        num = atoi(s);

    /* save the number and increment 'i' only if the value is between 18 and 30 */
        if (num >= MINNUM && num <= MAXNUM) {
            nums[i] = num;
            i++;
        }
    } while (i < n);

    /* print */
    printf("[NUMBERS]\n");
    for (i = 0; i < n; i++)
        printf("%d\n", nums[i]);

效率不低。代码有一些问题,但循环会继续,直到您输入所有必需的数字。这似乎是合乎逻辑的方法。主要问题是当你输入错误的数字时它应该给出错误,当你输入一个有效数字后跟一堆其他东西时,它只会忽略其他东西。

第一个不会迷路。第一个是您可以输入的值的数量。它被分配给变量 n。循环一直运行,直到您输入了那么多数字 (while(i < n))

数组实际上只是同一类型值的序列。您使用元素访问运算符 ([]) 来获取单个元素。在您的 array[variable] 示例中,variablearray 中的索引。这是如何工作的非常简单。 array指的是一个内存地址,可以在该地址的指定偏移处访问一个元素;索引处的偏移量乘以元素的大小。