作为指针传递时结构不保留数据
Struct not retaining data when passed as a pointer
我已经定义了一个头文件,其中包含一个结构和函数原型,这些原型将指向结构的指针作为参数。代码编译正常,除了在 main 中实例化的结构似乎不保留数值数据。
这是头文件:
#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) = '[=12=]';
}
主要功能如下:
#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;
}
这是代码为运行:
时的控制台输出
这里可能出了什么问题?
您的值是 double
,而不是 float
。您需要将 %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);
我已经定义了一个头文件,其中包含一个结构和函数原型,这些原型将指向结构的指针作为参数。代码编译正常,除了在 main 中实例化的结构似乎不保留数值数据。
这是头文件:
#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) = '[=12=]';
}
主要功能如下:
#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;
}
这是代码为运行:
时的控制台输出这里可能出了什么问题?
您的值是 double
,而不是 float
。您需要将 %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);