读取C txt文件时出现问题

时间:2014-12-26 10:38:03

标签: c xcode file

我正在制作一个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。

3 个答案:

答案 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个字符),直到找到它为止空间。由于firstNamelastName都由空格分隔,因此您可以使用fscanf()

答案 1 :(得分:1)

fgets()读取到换行符,其中包含\n

在这种情况下,firstname和lastname是不是在一个空格分隔的同一行上?

在您的代码中,您正在阅读第一行,只获取前20个字符,其余部分未读。

然后你要移动到下一行,而不是实际阅读后面的部分。

您可以通过执行

来解决此问题
  1. 使用fgets()
  2. 阅读整行
  3. 使用strtok()并使用空格作为分隔符将行拆分为令牌
  4. 然后将令牌复制到您的数组

答案 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;