2016-01-03 3 views
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; 
} 

Это выход консоли при выполнении кода:

As you can see, the struct human1 do not seem to retain the numerical data but retains the string

Что можно сделать здесь не так?

ответ

5

Ваши значения: double s, а не float s. Вы должны использовать %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); 
+0

спасибо большое, если оно исправлено. –

+0

@Shoaib В Stackoverflow принято принимать ответ, который поможет вам. – Ziffusion