【问题标题】:reading a .txt file, C读取 .txt 文件,C
【发布时间】:2014-03-12 22:38:26
【问题描述】:

我正在尝试从 .txt 文件中解析一行文本并将其设置为字符串。它正在解析大多数行,除了前 4 个字符。这就是我要解析的内容:

12X6 de8 dw3 ds5 g8,7 m3,4 p2,2 h2,2

这是我的代码:

FILE * rooms;
int i;
char c;
char roomString[ROOM_STRING_LENGTH];    
rooms = fopen("assets/rooms.txt", "r");

if(rooms == NULL)
{
    printf("error opening file\n");
}

fscanf(rooms, "%s", roomString);
while((c=fgetc(rooms))!='\n')
{           
    roomString[i] = c;
    i++;
}
printf("%s\n", roomString);

【问题讨论】:

  • c 应该是 int 而不是 char。您还需要初始化i,例如i = 0;.

标签: c parsing


【解决方案1】:

您的fscanf() 调用会占用输入的第一个单词。删除该呼叫。

if(rooms == NULL)
{
    printf("error opening file\n");
}

//fscanf(rooms, "%s", roomString);
while((c=fgetc(rooms))!='\n')

【讨论】:

  • 在我即将点击提交时击败我。
  • 谢谢,还有一个问题,我要如何扫描多行与上述格式相同的文本?
  • 你可以将你的代码封闭在一个循环中,或者重写为使用fgets(),它自己读取整行。
  • 如果我将它包含在一个循环中,如果我将“while((c=fgetc(rooms))!='\n')”切换到“while(( c=fgetc(rooms))!=EOF)
  • 没有。您对EOF 的外循环测试;您的内部循环测试 '\n' 就像现在一样。
【解决方案2】:

为什么在做fgetc的时候还要做fscanf。此 fscanf 将文件指针递增到下一个单词。删除 fscanf 并使用上述更改执行您的代码。

   #include<stdio.h>

   #define ROOM_STRING_LENGTH 50
    void main(){

    FILE* rooms;
    int i =0;
     char c;
     char roomString[ROOM_STRING_LENGTH];    
     rooms = fopen("rooms.txt", "r");
     if(rooms == NULL)
     {
        printf("error opening file\n");
      }

     //fscanf(rooms, "%s", roomString);
      //printf("%s\n", roomString);
     while((c=fgetc(rooms))!='\n')
     {

        roomString[i] = c;
         i++;
     }
     roomString[i] ='\0';
     printf("%s\n", roomString);
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    相关资源
    最近更新 更多