2012-01-10 79 views
1
#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行之前的人吗?我做错了什么?我在这段代码中做错了什么?

+1

如果您正确缩进代码,应该会看到问题。 – 2012-01-10 15:11:32

回答

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); 
+0

修复了问题中的%s ..这是一个错字。 我想我现在得到的重点..但你能解释一些内存分配部分..我想我得到了一个分段错误,因为它现在 – tarashish 2012-01-10 15:33:34

+1

@unussunu:为了这个练习的目的,可能是最简单的要做的事情是把'char * name'改成'char name [50]'(其中'50'是包含NUL终止符的字符串的最大长度)。 – NPE 2012-01-10 15:36:29

2

person是一种类型的,而不是一个对象。您不能将“scanf()”转换为类型:person“。

我只是简单地删除typedef,只是将结构定义留在main的主体之外;并在里面创建一个对象

struct person { /* ... */ }; 

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