我在这段代码中做错了什么?

时间:2012-01-10 15:09:39

标签: c arrays struct

#include <stdio.h>
main()
{
    typedef struct{
        char *name;
        int age;
    }person[5];

    int i;
    for (i=0;i<5;i++){
        printf ("name:");
        scanf("%s",person[i].name);
        printf("\nage:");
        scanf("%d",&person[i].age);}

    for (i=0;i<5;i++){
        printf ("person:%d",i);
        printf ("name:%s",person[i].name);
        printf ("age:%d",person[i].age);
    }
}

这是我的示例程序。但是在编译时我一直得到错误“在第10,12,16和17行之前的人的预期表达?我做错了什么?

2 个答案:

答案 0 :(得分:5)

要修复语法错误,请删除typedef关键字(您尝试声明变量,而不是类型)。

更好的是,改为:

typedef struct{
    char *name;
    int age;} Person;

Person person[5];

另外,以下是错误的:

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

您需要先为person[i].name分配内存(例如,使用malloc())。

最后,以下行中的%s格式说明符不正确:

printf ("age:%s",person[i].age);

答案 1 :(得分:2)

person是一种类型,而不是一种对象。您不能“scanf()进入类型:person”。

我只是删除了typedef,只是将struct定义留在main的主体之外;并在

中创建一个对象
struct person { /* ... */ };

int main(void) {
    struct person person[5];
    /* ... */
    return 0;
}