2014-12-07 56 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