1

構造体へのポインターをパラメーターとして受け取る構造体と関数のプロトタイプを含むヘッダー ファイルを定義しました。メインでインスタンス化された構造体が数値データを保持していないように見えることを除いて、コードのコンパイルはうまくいきます。

これはヘッダー ファイルです。

#ifndef _GETDATA
#define _GETDATA
#include <stdio.h>
struct PERSONDATA{
    char name[20];
    double age,mass;
};
typedef struct PERSONDATA person;
extern void getData(person *);
extern void getName(char *,int);
#endif

これは getData.c ファイルです。

#include <stdio.h>
#include "GETDATA.h"
void getData(person *ptr)
{
    printf("Enter name: ");
    getName(ptr->name,sizeof(ptr->name));
    printf("enter age: ");
    scanf("%f",&(ptr->age));
    printf("enter mass: ");
    scanf("%f",&(ptr->mass));
}

これは getName.c ファイルです。

#include <stdio.h>
#include "GETDATA.h"
void getName(char *ptrName, int varSize)
{
    int i=0;
    do
    {
        *(ptrName++) = getchar();
        ++i;
        if(i==varSize) printf("array full, EXITING!\n");
    }while(*(ptrName-1)!='\n' && i<varSize);
    *(ptrName-1) = '\0';
}

主な機能は次のとおりです。

#include <stdio.h>
#include "GETDATA.h"
int main(int argc, char **argv)
{
    person human1;
    printf("hello, world!\n\n");
    getData(&human1);
    printf("\nData entered: \n");
    printf("\tname = %s\n",human1.name);
    printf("\tMass = %f\n",&(human1.mass));
    printf("\tAge = %f\n",&(human1.age));
    return 0;
}

これは、コードを実行したときのコンソール出力です。

ご覧のとおり、struct human1 は数値データを保持していないように見えますが、文字列を保持しています

ここで何がうまくいかないのでしょうか?

4

1 に答える 1

5

あなたの価値観はdoubles ではなくfloats です。%lfで使用する必要がありますscanf():

printf("enter age: ");
scanf("%lf",&(ptr->age));
printf("enter mass: ");
scanf("%lf",&(ptr->mass));

また、あなたのプリントは間違っています。ポインタを渡しています。そのはず

printf("\tMass = %f\n",human1.mass);
printf("\tAge = %f\n",human1.age);
于 2016-01-03T18:33:35.760 に答える