|
发表于 2024-3-1 20:33:08
|
显示全部楼层
您好!问题出在您的代码中,具体是在data.h头文件中定义的结构体status的name字段应该是一个字符数组而不是单个字符。由于name只能存储一个字符,因此在赋值和输出的过程中只有最后一个字符有效。要解决这个问题,可以将name改为字符数组。以下是修复后的代码:
main.c
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include "data.h"
- struct status health, hunger;
- int main(void) {
- strcpy(health.name, "health");
- health.value = STATUS_MAX_VALUE;
- strcpy(hunger.name, "hunger");
- hunger.value = STATUS_MAX_VALUE;
-
- create_data(health);
- create_data(hunger);
- return 0;
- }
复制代码
create_data.c
- #include <stdio.h>
- #include <stdlib.h>
- #include "data.h"
- void create_data(struct status status) {
- FILE *fp = fopen("game.dat", "a");
- if (!fp) {
- perror("\033[31merror\033[0m: fopen failed in create_data");
- exit(EXIT_FAILURE);
- }
- fprintf(fp, "%s=%d\n", status.name, status.value);
- fclose(fp);
- }
复制代码
data.h
- #ifndef DATA_H
- #define DATA_H 1
- #define STATUS_NAMELEN_MAX 10
- #define STATUS_MAX_VALUE 100
- struct status {
- char name[STATUS_NAMELEN_MAX];
- int value;
- };
- void create_data(struct status status);
- #endif
复制代码
现在,编译并运行程序,game.dat的内容应该是:
game.dat
health=100
hunger=100
再次感谢您的提问!如有任何疑问,请随时向我提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|