dataのサイズが3であることを知りたいのですが、
main()では3になってくれるのに、
student_input()では0になってしまいます。
**1.**student_input(data)で渡しているdataは
配列の先頭のアドレスであるため、
student型への&data[0]の指すアドレスを渡している。
という認識なので、こういう動作になるのでしょうか。
**2.**student_input(data, 3)として、配列のサイズ3を渡す以外に、
student_input()の中だけでdata配列のサイズを知りえる方法はありますか。
**3.**下記の部分ですが、他のname, sexはエラーになるのに、
yearだけ、なぜエラーになるのでしょうか。
//scanf("%d", data[i].year); // エラーになる
scanf("%d", &data[i].year); // エラーにならない
C
1#include <stdio.h> 2#include <string.h> 3 4typedef struct student_tag { 5 char name[64]; 6 int year; 7 char sex[64]; 8} student; 9 10int student_input(student data[]); 11void student_print(student data[]); 12 13int main(void) { 14 student data[3]; 15 printf("%d\n", sizeof(data)/sizeof(data[0])); // 3になる 16 17 student_input(data); 18 student_print(data); 19 20 return 0; 21} 22 23int student_input(student data[]) { 24 printf("%d\n", sizeof(data)/sizeof(data[0])); // 0になる 25 int i; 26 char txt; 27 for (i=0; i<sizeof(data)/sizeof(data[0]); i++){ 28 printf("%d番目の生徒を入力してください\n", i); 29 printf("[名前] : "); 30 scanf("%s", data[i].name); 31 printf("[年齢] : "); 32 //scanf("%d", data[i].year); // エラーになる 33 scanf("%d", &data[i].year); // エラーにならない 34 if (data[i].year == -1) { 35 printf("-1が入力されたので、入力を終了します"); 36 return 1; 37 } 38 printf("[性別] : "); 39 scanf("%s", data[i].sex); 40 } 41 42 return 0; 43} 44 45void student_print(student data[]) { 46 int i; 47 for (i=0; i<sizeof(data)/sizeof(data[0]); i++){ 48 printf("%d番目の生徒\n", i); 49 printf("\t[名前]\t%s\n", data[i].name); 50 printf("\t[年齢]\t%d\n", data[i].year); 51 printf("\t[性別]\t%s\n", data[i].sex); 52 } 53 54 return; 55}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/02 10:37