使用结构和数组的int值错误

时间:2019-01-25 08:12:25

标签: c

你好,我对整数有疑问。这是我的代码:

#include <stdio.h>
#include <stdlib.h>
struct data
{
    char name[50];
    int grade[1];
};

int main()
{
    struct data persons[30];
    int n = 3;
    int i;

    for(i=0;i<n;i++)
    {
        printf("Type person name nr: [%d] ",i+1);
        scanf("%s",persons[i].name);
        printf("Type grade: (from 1 to 6) ");
        scanf("%d",persons[i].grade);
    }

    for(i=0;i<n;i++)
    {
        printf("Name [%d]: %s\n",i+1,persons[i].name);
        printf("Grade [%d]: %d\n",i+1,persons[i].grade);

    }

    return 0;
}

当我输入一些名称和等级时,输出不正确: This is my output

4 个答案:

答案 0 :(得分:3)

标准int够用时,您正在为一个年级使用数组。

_raw_spin_unlock_irqstore

然后您还需要使用&将int的引用传递给scanf。

struct data
{
    char name[50];
    int grade;
};

答案 1 :(得分:3)

程序的更正版本:

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

struct data {
    char name[50];
    int grade; // In you case, to store one integer value just use int varibale because it seems more logical.
};

int main() {
    struct data persons[30];
    int n = 3;
    int i;

    for (i = 0; i < n; i++) {
        printf("Type person name nr: [%d] ", i + 1);
        scanf("%s", persons[i].name);
        printf("Type grade: (from 1 to 6) ");
        scanf("%d", &persons[i].grade); // To fill member of structure you may use '&' sign because scanf gets address.
    }

    for (i = 0; i < n; i++) {
        printf("Name [%d]: %s\n", i + 1, persons[i].name);
        printf("Grade [%d]: %d\n", i + 1, persons[i].grade);

    }

    return 0;
}

此外,请记住,编译器并不总是告诉您某些地方出了问题,在大多数情况下,对编译器使用特殊标志(我在评论中提到了其中的一些标志)可以为您提供更多信息。

值得注意的是,当前的IDE突出显示了明显的错误,并确实加快了开发过程。

答案 2 :(得分:0)

您必须替换

web.config

作者

printf("Grade [%d]: %d\n",i+1,persons[i].grade);

在scanf中执行printf("Grade [%d]: %d\n",i+1,persons[i].grade[0]); ,因此,由于 grade 是向量,因此需要提供其地址,但是在 printf 中,您必须指定索引,否则打印向量的地址

但是使用向量是没有用的,因为它仅包含一个元素,最好直接使用 int 进行评分,当然在这种情况下,您必须给scanf("%d",persons[i].grade); scanf &persons[i].grade printf


执行:

persons[i].grade

答案 3 :(得分:0)

这是因为grade是一个数组,因此在向其中写入数据或从中读取数据时,您需要执行.grade[0],例如:

scanf("%d",persons[i].grade[0]);
...
printf("Grade [%d]: %d\n",i+1,persons[i].grade[0]);