我正在制作一个C程序,当用户关闭程序时我需要它来保存一些整数和字符串。我成功地做到了。创建了txt文件并且所有内容都已正确写入,问题是,当我尝试在编译器上读取它时,它无法正常工作。我的代码是: 写:
saveFile = fopen("saveFileP.txt", "w");
for (int i=0; i<numberofPeople; i++) {
fputs(people[i].firstName, saveFile);
fputs(" ", saveFile);
fputs(people[i].lastName, saveFile);
fputs(" ", saveFile);
fprintf(saveFile, "%d ", people[i].cash);
fprintf(saveFile, "%d ", people[i].position);
fprintf(saveFile, "%d ", people[i].inGame);
}
阅读:
saveFile = fopen("saveGameP.txt", "r");
for (int i=0; i<numberOfPeople; i++) {
fgets(people[i].firstName, 20, saveFile);
fgets(people[i].lastName, 20, saveFile);
fscanf(saveFile, "%d", &people[i].cash);
fscanf(saveFile, "%d", &people[i].position);
fscanf(saveFile, "%d", &people[i].inGame);
}
然后我要求它将值打印到屏幕上并写入错误的值,但在txt文件中值是正确的。我究竟做错了什么?谢谢。
PS:我正在使用Xcode。
答案 0 :(得分:1)
尝试
for (int i=0; i<numberOfPeople; i++) {
fscanf(saveFile,"%s %s",people[i].firstName,people[i].lastName);
fscanf(saveFile, "%d", &people[i].cash);
fscanf(saveFile, "%d", &people[i].position);
fscanf(saveFile, "%d", &people[i].inGame);
}
我已使用fscanf()
因为fgets()
读取整行直到遇到\n
字符(或直到最多读取20个字符),直到找到它为止空间。由于firstName
和lastName
都由空格分隔,因此您可以使用fscanf()
。
答案 1 :(得分:1)
fgets()
读取到换行符,其中包含\n
在这种情况下,firstname和lastname是不是在一个空格分隔的同一行上?
在您的代码中,您正在阅读第一行,只获取前20个字符,其余部分未读。
然后你要移动到下一行,而不是实际阅读后面的部分。
您可以通过执行
来解决此问题fgets()
strtok()
并使用空格作为分隔符将行拆分为令牌答案 2 :(得分:0)
我建议使用getline(虽然没有在POSIX中指定), 使用它来读取整行(以验证使用printf打印行)
然后,例如,如果您的值以空格分隔。使用strtok函数来标记您刚读取的行。
例如:
strtok("123: A String", " "); //returns a pointer to the tokenized string
strtok(NULL, " ");
strtok(NULL, " ");
strtok(NULL, " ");
会将字符串分解为: &#34; 123:&#34; &#34; A&#34; &#34;字符串&#34;