プログラムの内容は、ある3人の[名前,年齢,性別]を記述・表示するもので、
3つの構造体を用意し、入力関数・出力関数を呼び出すというものです。
私はMicrosoft Visual Studioを使って練習しています。
下記のプログラムを作ってみたのですが、38行目・40行目(コメントで☆を付けている行)について、
エラーコードC4477が吐き出され、解決できないでいます。
原文ママでエラーコードを載せますと、『 'scanf' : 書式文字列 '%d' には、型 'int *' の引数が必要ですが、可変個引数 1 は型 'int' です』となっています。
自分の解釈ですが、scanf関数は、入力した文字列の格納先としてアドレスを指定する(ポインタを示す)必要があり、そこでエラーが出ているのではないかと思っています。たとえば、変数aに格納するなら「&a」、ポインタ変数pに格納されているアドレスに格納するなら「p」と記述するようにです。
しかし私は構造体に関しては付け焼刃なもので、どうやって直せばよいのかわかりません。構造体の参照として「->」を用いるのはあっているはずなんですが…
それと、なぜその入力関数のnameだけが通っているのかも不思議です。メンバーの型が違うだけでエラーの2つともほとんど同じ様式なのですが…
ご教授のほど、よろしくお願いいたします。
#include <stdio.h>
#include <string.h>
typedef struct
{
char name[64];
int age;
int sex;
}People;
void structInput(People *date);
void structOutput(People date);
int main(void)
{
int i;
People date[3];
for (i = 0; i <= 2; i++)
{
structInput(&date[i]);
}
for (i = 0; i <= 2; i++)
{
printf("%d人目", i + 1);
structOutput(date[i]);
}
return 0;
}
void structInput(People *date)
{
printf("名前\n");
scanf("%s", date->name);
printf("年齢\n");
scanf("%d", date->age); /* ☆ */
printf("性別( 0-男性 、 1-女性 )\n");
scanf("%d", date->sex); /* ☆ */
}
void structOutput(People date)
{
char sex[32];
printf("%s", date.name);
printf("%d", date.age);
if (date.sex == 0)
{
strcpy(sex, "男性");
}
else {
strcpy(sex, "女性");
}
printf("%s", sex);
return;
}