繁体   English   中英

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

[英]How do you read in a number and a string from a file in C? Keeping in mind that some lines in the file only has a number and not a string

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

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++;
    }
}

}

现在,我的代码读取行,但不读取空格。 或更确切地说,它不知道如何检测行是否在数字后没有字符串。 我的代码输出如下:

10 17
38所以你想成为摇滚明星
22你见过她的脸吗
12 CTA-102
16文艺复兴博览会
12点之间
23每个人都被烧死了
18思想和言语
12个心灵花园
13我的后页
21没有名字的女孩
3为什么
19每天都在发生
16不要挥手
13我的后页
12个心灵花园
11位女士朋友
18老约翰·罗伯逊
19 13冰淇淋人

我的问题是如何获取代码的输出以匹配文件中的输入? 我必须在代码中进行哪些更改? 任何帮助是极大的赞赏!

除非您知道所有行都是完全相同的正确格式,否则您不能(合理地)使用fscanf() 相反,我建议使用fgets()获取一行文本,然后解析该行(也许使用sscanf() )。

例如,

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

您需要将sscanf()返回值的检查添加到上述示例中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM