Переменная Использование Fgets с массивом символов в C - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь читать в классе (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;


}

1 Ответ

1 голос
/ 03 февраля 2020

Если вы хотите напечатать три символа, как указано в выходных данных, то ваш массив также должен содержать три символа:

char moduleGrades[2];

Также это l oop здесь:

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

Само по себе это не так, потому что вы вычитаете 1, вы находитесь внутри l oop, но я бы сделал это и просто вместо этого сказал бы:

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

Вызов fgets внутри l oop неверен. Вы даете ему char вместо указателя на char. Вместо использования fgets, я бы просто использовал scanf снова:

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

Когда вы печатаете те char, которые вы читаете, вам также нужно использовать спецификатор формата %c:

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

Таким образом он напечатает char, который вы прочитали ранее. Например, если вы нажали A, будет напечатано A. С %d он, вероятно, выведет 65, но это неопределенное поведение, так что вместо этого может произойти что-то еще, и нет никакой гарантии, что именно произойдет.

...