【问题标题】:fscanf not working in C while reading char #读取字符时 fscanf 在 C 中不工作#
【发布时间】:2014-02-03 07:56:24
【问题描述】:

我必须阅读带有# 和\n 分隔的一些足球比赛的文本文件。 我试过这个:

char *pr;
char *dr;
char *re;
int f;

ul=fopen("nogomet.txt","r");

f=fscanf(ul,"%[^#]#",pr);
while (f!=EOF){
    printf("pr-%s\n",pr);

    f=fscanf(ul,"%[^#]#",dr);
    printf("dr-%s\n",dr);

    f=fscanf(ul,"%[^\n]\n",re);
    printf("re-%s\n",re);

    f=fscanf(ul,"%[^#]#",pr);
}

但是当它到达时它会碰撞:

    f=fscanf(ul,"%[^#]#",dr);

有人可以帮帮我吗? 我用 fscanf 错了吗?

输入文件是这样的:

Carlton Blues (Melbourne)#Geelong Cats (Geelong)#3:0
Collingwood Magpies (Melbourne)#Melbourne Demons (Melbourne)#5:3

...等等...

【问题讨论】:

  • 什么是博士和公关,它们包含什么?
  • 已编辑。只是字符 *。他们必须包含第一队和第二队的“字符串”。

标签: c string file char scanf


【解决方案1】:

Preet 很到位。

此外,如果您对在循环之外使用一个 fscanf() 感到有些不安,您可以这样做:

char pr[500];
char dr[500];
char re[500];

int f;

while (1){
    //PR
    f=fscanf(ul,"%[^#]#",pr);
    if (f==EOF)
        break;
    printf("pr-%s\n",pr);

    //DR
    f=fscanf(ul,"%[^#]#",dr);
      //we can also check f here
    printf("dr-%s\n",dr);

    //RE
    f=fscanf(ul,"%[^\n]\n",re);
      //we can also check f here
    printf("re-%s\n",re);
}

将打印

pr-Carlton Blues (Melbourne)
dr-Geelong Cats (Geelong)
re-3:0
pr-Collingwood Magpies (Melbourne)
dr-Melbourne Demons (Melbourne)
re-5:3

【讨论】:

    【解决方案2】:

    您没有为 pr 和 dr 分配任何空间。 scanf 需要读取数据到缓冲区。

    这是来自C++ Reference for fscanf的示例

    /* fscanf example */
    #include <stdio.h>
    
    int main ()
    {
      char str [80];  // << ---------- allocated some space.
      float f;
      FILE * pFile;
    
      pFile = fopen ("myfile.txt","w+");
      fprintf (pFile, "%f %s", 3.1416, "PI");
      rewind (pFile);
      fscanf (pFile, "%f", &f);
      fscanf (pFile, "%s", str);  // <<--------------------
      fclose (pFile);
      printf ("I have read: %f and %s \n",f,str);
      return 0;
    }
    

    【讨论】:

    • 谢谢!我已经连续 18 小时醒着,所以我忽略了它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多