你如何读取C中文件的数字和字符串?请记住,文件中的某些行只有一个数字而不是一个字符串

use*_*144 1 c

我有一个包含多行的文件,每行都有一个数字,后跟一个空格,然后是一个字符串.但是文件中的某些行在数字后面没有字符串.这是文件的一部分:

10
17
38所以你想成为一个摇滚明星
22你见过她的面孔
12 CTA - 102
16文艺复兴时期的博览会
12时间
23每个人都被烧了
18个想法和文字
12心灵花园
13我的背页
21女孩与没有名字
3为什么
19它每天都会发生
16不要制造波浪
13我的背页
12心灵花园
11女士朋友
18老约翰罗伯逊
19
13冰淇淋男子
14挂在斜坡上

这是我到目前为止:

#include <stdio.h>

typedef struct 
  {
    int num_tracks;
    char tracks[];
  }album_store;


int main(int argc, char *argv[])
{
  album_store album[10000];
  int numb_tracks;
  char line;
  int i=0;

if (argc <2 )
{
    printf("You need at least one argument\n");
}

else
{
    FILE *file;
    file=fopen(argv[1],"r");

    while(fscanf(file,"%d %[^\n]",&numb_tracks,album[i].tracks) != EOF)
    {
        album[i].num_tracks=numb_tracks;
        printf("%d %s\n",album[i].num_tracks,album[i].tracks);
        i++;
    }
}

}
Run Code Online (Sandbox Code Playgroud)

现在我的代码读入了行,但没有空格.或者更确切地说,它不知道如何检测一条线在数字后面是否没有字符串.我的代码输出如下:

10 17
38所以你想成为一个摇滚明星
22你见过她的面孔
12 CTA - 102
16文艺复兴时期的博览会
12时间
23每个人都被烧了
18个想法和文字
12心灵花园
13我的背页
21女孩与没有名字
3为什么
19它每天都会发生
16不要让波浪
13我的背页
12心灵花园
11女士朋友
18老约翰罗伯逊
19 13冰淇淋男

我的问题是如何获得我的代码输出以匹配文件的输入?我的代码需要更改什么?任何帮助是极大的赞赏!

Gre*_*ill 5

你不能(合理地)使用,fscanf()除非你知道所有的线都是完全相同的正确格式.相反,我会建议使用fgets(),以获得一个线在时间文本,然后解析该行(可能使用sscanf()).

例如,

char buf[1000];
while (fgets(buf, sizeof(buf), file) != NULL) {
    sscanf(buf,"%d %[^\n]",&numb_tracks,album[i].tracks);
    // etc
}
Run Code Online (Sandbox Code Playgroud)

您需要添加sscanf()对上述示例的返回值的检查.