【发布时间】:2015-11-20 14:18:18
【问题描述】:
我是一名学生,尝试打印我插入到名为 test.txt 的 txt 文档中的 6 行
测试文件是.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, " %c", &(user_profile.gender));怎么样 -
并且,
fscanf(file_pointer, "%s", user_profile.first_name);应该足够了 -
@SouravGhosh,ekstra & 是前一次尝试的迷路,已修复它:-) 至于
%c前面的空白,没有修复它 -
关于这一行:
void user_profile_loader(struct profile_info user_profile),传递整个数组(几乎)总是一个坏主意。将指针传递给数组要好得多。 -
在调用
fopen()时,始终检查(!=NULL)返回值以确保操作成功。