C结构和int变量的问题

时间:2017-09-10 03:12:47

标签: c struct

#include <stdio.h>
#include "struct.h"

#define NUM 3

struct Student
{
    char name[20];
    int age;
};



int main(void)
{
    struct Student s_array[NUM];

    for(int i=0;i<NUM;i++)
    {
        printf("name: ");
        scanf("%s",s_array[i].name);

        printf("age: ");
        scanf("%i",s_array[i].age);
    }
    for(int i=0;i<NUM;i++)
    {
        printf("%s is %i years old",s_array[i].name,s_array[i].age);

    }
    return 0;
}

我不知道是什么问题我声明了一个类型为student的结构数组,并使用for循环来初始化它们的字段,但是当我键入年龄时它会给我分段错误。为什么会这样?

struct.c:17:20:warning:format指定类型'int *'但参数的类型为'int'[-Wformat]         的scanf( “%d”,s_array [I]。年龄);

3 个答案:

答案 0 :(得分:1)

我为你制定了这段代码

#include < stdio.h>
#include < stdlib.h>
#define NUM 3
struct Student
{
    char name[20];
    int age;
};

int main(void)
{
    struct Student s_array[NUM];
    for(int i=0;i<NUM;i++)
    {
        printf("name: ");
        scanf("%s",&s_array[i].name);

        printf("age: ");
        scanf("%d",&s_array[i].age);
    }
    for(int i=0;i<NUM;i++)
    {
        printf("%s is %d years old",s_array[i].name,s_array[i].age);
    }
    return 0;
}

答案 1 :(得分:0)

struct中的int是一个int,而不是指向int的指针。数组可以直接分配给指针,但在其他类型上,您需要应用地址(&amp;)运算符。而不是说&#34; s_array [i] .age&#34;,说&#34;&amp;(s_array [i] .age)&#34;。

答案 2 :(得分:-1)

  #include<stdio.h>
//#include "struct.h>
 #define NUM 3
  struct Student
 {
 char name[20];
 int age;
};
int main(void)
{
struct Student s_array[NUM];
for(int i=0;i<NUM;i++)
{
    printf("name: ");
    scanf("%s",&s_array[i].name);
    printf("age: ");
    scanf("%d",&s_array[i].age);//You sud use "&"operator to take input 
}
for(int i=0;i<NUM;i++)
{
    printf("%s is %d years old",s_array[i].name,s_array[i].age);

}
return 0;
}