Предупреждение C "format"%d "ожидает аргумент типа 'int *', но аргумент 2 имеет тип 'int'

Я хочу заполнить эти массивы строкой и некоторыми числами, но не могу понять, почему я не могу.

#include <stdio.h>

struct students{
char name[30];
int points[10];
int absences[10];
};

int main()
{
int i, n;
printf("Declare the number of students: ");
scanf("%d", &n);

struct students stud[n];

for (i = 0; i < n; i++) {
    printf("Name: ");
    scanf("%s", &stud[i].name);
    printf("Points: ");
    scanf("%d", &stud[i].points);
    printf("Absences: ");
    scanf("%d", &stud[i].absences);
}


for( i = 0; i < n; i++)
{
    printf("%s\n", stud[i].name);
    printf("%d\n", stud[i].points);
    printf("%d\n", stud[i].absences);

}


}

Это предупреждение, которое я получаю:

предупреждение: формат '% s' ожидает аргумент типа 'char ', но аргумент 2 имеет тип 'char () [30]' [-Wformat=]

     scanf("%s", &stud[i].name);

feladat1.c: 21: 15: предупреждение: формат "%d" ожидает аргумент типа "int ", но аргумент 2 имеет тип "int () [10] '[-Wformat=]

     scanf("%d", &stud[i].points);

feladat1.c: 23: 15: предупреждение: формат "%d" ожидает аргумент типа "int ", но аргумент 2 имеет тип "int () [10] '[-Wformat=]

     scanf("%d", &stud[i].absences);

feladat1.c: 30: 16: предупреждение: формат "%d" ожидает аргумент типа "int", но аргумент 2 имеет тип "int *" [-Wformat=]

     printf("%d\n", stud[i].points);

feladat1.c: 31: 16: предупреждение: формат "%d" ожидает аргумент типа "int", но аргумент 2 имеет тип "int *" [-Wformat=]

     printf("%d\n", stud[i].absences);

1 ответ

  1. В struct students, int points[10]; должно быть int points;, int absences[10]; должно быть int absences;

  2. Линия scanf("%s", &stud[i].name); должно быть scanf("%s", stud[i].name);

Следуйте code может работать:

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

struct students{
    char name[30];
    int points;
    int absences;
};

int main()
{
    int i, n;
    printf("Declare the number of students: ");
    scanf("%d", &n);

    struct students *stud = malloc(sizeof(struct students) * n);

    for (i = 0; i < n; i++) {
        printf("Name: ");
        scanf("%s", stud[i].name);
        printf("Points: ");
        scanf("%d", &stud[i].points);
        printf("Absences: ");
        scanf("%d", &stud[i].absences);
    }


    for( i = 0; i < n; i++)
    {
        printf("%s\n", stud[i].name);
        printf("%d\n", stud[i].points);
        printf("%d\n", stud[i].absences);

    }
    return 0;
}

Попробуйте этот код

#include <stdio.h>
struct students{
    char name[30];
    int points;
    int absences;
};

int main()
{
    int i, n;
    printf("Declare the number of students: ");
    scanf("%d", &n);

    struct students stud[n];

    for (i = 0; i < n; i++) {
        printf("Name: ");
        scanf("%s", stud[i].name);
        printf("Points: ");
        scanf("%d", &stud[i].points);
        printf("Absences: ");
        scanf("%d", &stud[i].absences);
    }


    for( i = 0; i < n; i++)
    {
        printf("%s\n", stud[i].name);
        printf("%d\n", stud[i].points);
        printf("%d\n", stud[i].absences);

    }
    return 0;
}
Другие вопросы по тегам