繁体   English   中英

Fscanf扫描不正确的信息

[英]Fscanf scanning incorrect information

我是一名学生尝试打印6行我已经插入到一个名为test.txt的txt文档中

测试文件是带有以下文本的.txt文本中的简单纯文本,所有文本都在其自己的行中:

Nikolaj
Ljorring
m
20
182
200

但是,我需要将加载的数据放入一个看起来像这样的结构:

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

还有一个看起来像这样的装载器/打印功能:

void user_profile_loader(struct profile_info user_profile)
{
FILE *file_pointer;
file_pointer = fopen("test.txt", "r");

fscanf(file_pointer, "%s", &user_profile.first_name);

fscanf(file_pointer, "%s", user_profile.last_name);

fscanf(file_pointer, "%c", &(user_profile.gender));

fscanf(file_pointer, "%d", &(user_profile.age));

fscanf(file_pointer, "%d", &(user_profile.height));

fscanf(file_pointer, "%d", &(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);

fclose(file_pointer);
}

但是,我的输出看起来像这样:

Nikolaj
Ljorring
(wierd C with a line beneath it)c [So a wierd C followed by a normal lowercase c]
10
5
0.000000
fscanf(file_pointer, "%s", &user_profile.first_name);
                           ^ no need of & here 

和这里 -

fscanf(file_pointer, "%d", &(user_profile.weight));

你使用%d来读取一个double值。你通过错误的参数调用UB 。在这里使用%lf

在你的printf -

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);

什么是\\n€c 你应该使用说明符%c

注意 - 您应该检查fopenfscanf返回。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM