2014-12-07 40 views
-1

存取权限指针这是我的代码:如何在结构

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

typedef struct pers 
{ 
    int age; 
    char *name; 
    float height; 
}Person; 

void read(Person p[], int *nr) // an array of persons, and nr is the number of persons 
{ 
    scanf("%d", nr); 
    int i; 
    for(i = 0; i < *nr; i++) 
    { 
     scanf("%d", &p[i].age); 
     p[i].name = calloc(100, sizeof(char)); 
     scanf("%s", p[i].name); 
     scanf("%f", &p[i].height); 
    } 
} 

int main() 
{ 
    int nr; 
    Person p[100]; 
    int i; 
    read(p, &nr); 
    for(i = 0; i < nr; i++) 
    { 
     printf("%d\n", p[i].age); 
     printf("%s\n", p[i].name); 
     printf("%f\n", p[i].height); 
    } 
return 0; 
} 

我不知道为什么,这不是很好stocate数据。我如何使用指针或其他任何东西,以获得访问年龄和身高,还*的名字

如果我只尝试与年龄和身高的代码工作,但是当我添加名称,它stucks。

这是我输入

3 // numbers of persons 
23 // age 
John Smith //firstname + lastname   //1person 
182.5 //height 
18 
Mat Plow         //2person 
152.6 
56 
Alex Grim         //3person 
172 

任何想法?

我想我可能用得到,并与一些指针,但我不知道如何:d

谢谢!

+0

你写'#include '吗?也显示你的意见。 – BLUEPIXY 2014-12-07 12:04:34

回答

0

scanf(" %[^\n]s", p[i].name);

这对我来说是什么在起作用!

-2

scanf电话改成这样:

scanf("%s\n", p[i].name); 

请注意\n增加。

+0

不要告诉我这是单一的问题,因为我疯了:)) – 2014-12-07 12:06:03

+0

@ user3582615不要这样做 – 2014-12-07 13:12:14

+0

只有当我想读一个字,如果有2代码崩溃 – 2014-12-07 19:56:50

2

因为你的代码没有问题,你的scanf输入规范肯定有问题。检查/读取输入格式说明符文档。对于'%s'它说:“字符串,直到第一个空白字符(空格,制表符或换行符)”,所以如果名字是“名字姓氏”,它只会读取“名字”。另外,您可以添加调试语句以查看迄今为止已读取的内容,也可以使用调试器来遍历代码以查看会发生什么。 scanf-guru可以立即告诉你有什么问题;所有其他人都必须阅读文件。

+0

是的,这是我的问题,但我怎么读整个名字,比如'FirstName LastName'? – 2014-12-07 19:50:53

+0

阅读格式规范的文档。清楚地记录了如何做到这一点。 – 2014-12-08 09:24:51