这个数组 questions 是一个内存的变量,每次程序运行,自然不会保留上次运行的结果
你得先用代码在程序运行开始的时候将questions.txt读取到数组
举个简单的例子:
你把你的小秘密写了一个纸条,放进了一个盒子,你打开这个盒子就可以看到小纸条,这是一种直接访问内存中数据的方式,也是我们最一般的数据访问方式。
你现在有很多盒子,有的盒子有一些小纸条,上面写着你的小秘密,另一些盒子写着你要去哪里找到这些有小纸条的盒子,这样,你就可以先找到有地址的盒子,再根据这个地址去找到你的小秘密。
那么,写着地址的小纸条也是小纸条,装着地址的盒子也是一个盒子,我们是不是可以有另一个盒子,装着一个纸条,上面有个地址,打开之后发现里面的纸条依旧写着地址,再继续下去,依旧写着地址……最后找到一个小秘密呢。
可以,这就是多级指针,C语言运行你这样套娃,但我们不建议过度套娃,要自行承担看不懂程序的后果。
问题分析: 根据问题描述,当使用C语言保存文件时,数据保存失败且在重新运行程序后之前保存的数据被清零。这可能有以下几个原因导致:
解决方案: 1. 确保程序正确打开文件并进行写入操作,一般使用fopen
函数打开文件,使用fprintf
函数将数据写入文件。 2. 确保文件打开方式正确,常见的打开方式有"r"(只读)、"w"(写入)、"a"(追加)等,默认以文本方式打开。 3. 在重新运行程序时,可以使用fread
函数读取之前保存的数据。需要注意的是,读取数据之前需要使用fopen
函数打开文件,并使用fclose
函数关闭文件。
以下是一个示例代码,演示了如何保存数据、重新运行程序时读取数据,并且保证数据的持久化:
#include <stdio.h>
int main() {
int data = 10;
FILE *file = fopen("data.txt", "w"); // 打开文件,以写入方式打开
if (file != NULL) {
fprintf(file, "%d", data); // 将数据写入文件
fclose(file); // 关闭文件
} else {
printf("无法打开文件\n");
}
// 重新运行程序时读取之前保存的数据
file = fopen("data.txt", "r"); // 打开文件,以只读方式打开
if (file != NULL) {
fscanf(file, "%d", &data); // 从文件中读取数据
fclose(file); // 关闭文件
printf("读取的数据为:%d\n", data);
} else {
printf("无法打开文件\n");
}
return 0;
}
这样就可以确保在重新运行程序时,之前保存的数据仍然存在。
对于颜值问题,通常是指在保存文件时,文件中的内容显示不正常,可能出现乱码等情况。解决颜值问题的方式取决于文件的编码方式以及读写操作的方式。
如果文件编码方式是UTF-8,保存的数据中包含中文等字符,那么在读取文件时,需要使用相同的编码方式进行读取。如果文件编码方式是ASCII或者其他编码方式,可以使用文本编辑器打开文件,选择正确的编码方式打开,查看文件中的内容是否正常。
如果存在特殊字符或者乱码问题,可以考虑使用二进制方式保存文件,而不是文本方式。可以使用fwrite
函数进行二进制写入,使用fread
函数进行二进制读取。这样可以确保文件中的内容在保存和读取过程中不会发生变化,也不会出现颜值问题。