当前位置:  开发笔记 > 编程语言 > 正文

当作为指针传递时,Struct不保留数据

如何解决《当作为指针传递时,Struct不保留数据》经验,为你挑选了1个好方法。

我已经定义了一个带有结构和函数原型的头文件,它将指向结构的指针作为参数.代码编译很好,除了在main中实例化的struct似乎不保留数值数据.

这是头文件:

#ifndef _GETDATA
#define _GETDATA
#include 
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 
#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 
#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

主要功能如下:

#include 
#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似乎不保留数字数据但保留字符串

这可能会出错?



1> Vaughn Cato..:

你的价值观是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);

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有