当我尝试将输入字符分配给我的结构时,程序会崩溃

时间:2015-11-20 12:36:57

标签: c scanf

作为编程中的新学生,我正在尝试创建一个程序,该程序将从用户那里获取输入并将其保存到稍后将保存到文件的结构中,除了用户输入部分之外的所有内容都在工作,但是这里前两部分按预期工作(名称和姓氏是数组)

printf("And what about down below? are you a man or a woman? <M/F>\n");
scanf(" %c", user_profile.gender);

是崩溃我的程序的部分

在任何函数之外分配结构以使其成为全局

struct profile_info
{
char first_name[30];
char last_name[30];
char gender;
int age;
int height;
double weight;
};

最后我在我的主()中做了一个占位符我不知道如果需要这个

strcpy(user_profile.first_name, "placeholder");
strcpy(user_profile.last_name, "placeholder");
user_profile.gender = 't';
user_profile.age = 5;
user_profile.height = 5;
user_profile.weight = 5;

赋值发生在一个函数内部,该函数由main()调用的函数调用,如果它具有任何相关性

也是占位符,在主

中创建

** 更新 **

问题已经解决(看答案1) 但是当尝试使用facanf扫描文件时出现了一个新的问题,导致以下

我已尝试使用fscanf(),但无法获得前2行读取

    /* this function will load the user profile if such a profile exists */
    void user_profile_loader(struct profile_info user_profile)
    {
    FILE *file_pointer;
    int i;
    file_pointer = fopen("test.txt", "r");

    fscanf(file_pointer, user_profile.first_name);

    fscanf(file_pointer, user_profile.last_name);

    fscanf(file_pointer, &(user_profile.gender));

    fscanf(file_pointer, &(user_profile.age));

    fscanf(file_pointer, &(user_profile.height));

    fscanf(file_pointer, &(user_profile.weight));

    printf("%s \n%s \n€c \n%d \n%d \n%lf", user_profile.first_name, user_profile.last_name,
    user_profile.gender, user_profile.age, user_profile.height, user_profile.weight);
}

然而,我需要帮助specefieng应该读取哪些行(1 thorugh 6)我首先尝试使用

    /* this function will load the user profile if such a profile exists */
    void user_profile_loader(struct profile_info user_profile)
    {
    FILE *file_pointer;
    int i;
    file_pointer = fopen("test.txt", "r");

    fscanf(file_pointer, 1, user_profile.first_name);

    fscanf(file_pointer, 2, user_profile.last_name);

    fscanf(file_pointer, 3, &(user_profile.gender));

    fscanf(file_pointer, 4, &(user_profile.age));

    fscanf(file_pointer, 5, &(user_profile.height));

    fscanf(file_pointer, 6, &(user_profile.weight));

    printf("%s \n%s \n€c \n%d \n%d \n%lf", user_profile.first_name, user_profile.last_name,
    user_profile.gender, user_profile.age, user_profile.height, user_profile.weight);
}

两个都不起作用,而当前的一个(第一个)给我一个错误

In file included from introduktion.c:1:0:
(my directory) stdio.h:385:15: note: expected 'const char * restrict' but argument is of type 'int'
int __cdec1 fscanf(FILE * __restrict__ _File,const char * __restrict__ _Format,...) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;

传递fscanf的参数2使得整数指针没有强制转换 所以它不明白它得到了什么输入?

1 个答案:

答案 0 :(得分:2)

在您的代码中,

scanf(" %c", user_profile.gender);

应该是

scanf(" %c", &(user_profile.gender));
             ^

您需要提供变量的地址作为格式说明符的参数。

有关scanf()的更多信息,请阅读man page