首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从C文件中读取数字和字符串?请记住,文件中的某些行只有一个数字,而不是一个字符串。

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

Stack Overflow用户
提问于 2012-04-02 03:24:33
回答 1查看 121关注 0票数 1

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

10

17

38所以你想成为摇滚摇滚明星

你见过她的脸吗?

12 C.T.A. - 102

16次文艺复兴博览会

12次

23每个人都被烧死了

18种思想和文字

12心灵花园

13我的背页

21没有名字的女孩

3.为什么

每天都会发生这种情况

16 .不要招摇

13我的背页

12心灵花园

11位女士朋友

18岁的约翰·罗伯逊

19

13冰淇淋人

14坚持住斯隆比

以下是我到目前为止所拥有的:

代码语言:javascript
复制
#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所以你想成为摇滚摇滚明星

你见过她的脸吗?

12 C.T.A. - 102

16次文艺复兴博览会

12次

23每个人都被烧死了

18种思想和文字

12心灵花园

13我的背页

21没有名字的女孩

3.为什么

每天都会发生这种情况

16 .不要招摇

13我的背页

12心灵花园

11位女士朋友

18岁的约翰·罗伯逊

1913雪糕文

我的问题是如何使代码的输出与文件中的输入相匹配?在我的代码中我需要修改什么?任何帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

发布于 2012-04-02 03:27:57

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

例如,

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

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9970539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档