2014-09-19 58 views
0
#include <stdio.h> 
#define MAX 3 // students in class 
#define LEN 20 // max lengths stydent's name 

typedef struct { 
    char name[LEN]; 
    int am; 
    float tv; 
}student; 

void read (student board[]) {  //this function should fill the board of structs 
    int i; 
    for (i=0; i<MAX; i++) { 
     printf("\n give student's name"); 
     scanf ("%s",&board[i].name); 
    } 

} 

void read (student board[]); 

int main (void) { 
    student class[MAX]; 
    read (class); 
return 0; 
} 

当我尝试编译它,我得到这个错误结构体和焦炭串

let2.c:15:3:警告:格式 '%s' 的期望类型 '字符' 的说法,但参数2的类型为'char()[20]'[-Wformat =]
let2.c:15:3:warning:格式'%s'需要类型为'char '的参数,但参数2的类型为'char()[20]'[-Wformat =]

回答

0

在您的scanf呼叫中丢失&。你想要一个指向字符串的第一个字符,而不是一个指针数组本身:

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

,或等效:

scanf("%s", &board[i].name[0]); 
+0

哇!如此快速和准确。非常感谢你 !! 不是指向数组本身的指针。 你能解释一点点吗? – noobgrammer 2014-09-19 20:50:06

+0

这将是一个很好的机会,提到没有最大字段宽度的'%s'的危险。 – mafso 2014-09-19 20:53:09

+0

我不得不说这是令人费解的,因为对于任何'类型arr [N]',只要您在“声明范围”中“测试它们”,“arr”和“&arr” arr'。因此,无论是编译器在这里发布了一个徒劳的警告,还是'board [i] .name'和'board [i] .name'的值都不相同,因为它们并未在“原始”声明范围中使用。 – 2014-09-19 21:01:18