带有C字符数组的可变使用Fgets

问题描述 投票:-1回答:1

我正在尝试将年级(1-10)读入称为moduleGrades的数组。

fgets(moduleGrades[i]-1, sizeof(moduleGrades), stdin);导致错误,但是我键入的正是我所需要的。我想存储3个成绩(如果输入的模块数为3)

非常感谢。

#include<stdio.h> 
#include <string.h>

char name[30];
int moduleNumber;
char moduleGrades[2];


int main(int argc, char **argv) 
{   //read name & module amount
    printf ("Please enter your name: ");
    fgets(name, sizeof(name), stdin);
    printf ("How many Modules: ");
    scanf("%d", &moduleNumber);


    int i;
    for (i = 1; i <= moduleNumber; i++)
    {
        printf ("Please enter module %d grade ", i);
        fgets(moduleGrades[i]-1, sizeof(moduleGrades), stdin);

    }


    printf("%d", moduleGrades[0]);
    printf("%d", moduleGrades[1]);
    printf("%d", moduleGrades[2]);

    return 0;


}
c arrays char fgets
1个回答
0
投票

如果您要输出三个字符,如输出所示,则您的数组还必须能够容纳三个字符:

char moduleGrades[2];

也在此循环:

int i;
for (i = 1; i <= moduleNumber; i++)

这本身并没有错,因为您减去了循环内要使用的1,但我会这样做,而只是将其放在此位置:

for (int i = 0; i < moduleNumber; i++)

循环内的fgets调用是错误的。您正在给它一个char而不是一个指向char的指针。除了使用fgets,我将再次使用scanf

scanf(" %c", &moduleGrades[i]);

[打印您读入的那些char时,也需要使用%c格式说明符:

printf("%c", moduleGrades[0]);

这样,它将打印您先前阅读的char。例如,如果您按下A,它将打印A。使用%d,可能会显示65,但这是未定义的行为,因此可能会发生任何事情,并且无法保证确切会发生什么。

© www.soinside.com 2019 - 2024. All rights reserved.