我有一个包含多行的文件,每一行上都有一个数字,后面跟着一个空格,然后是一个字符串。但是文件中的一些行在数字后面没有字符串。以下是文件的一部分:
10
17
38所以你想成为摇滚摇滚明星
你见过她的脸吗?
12 C.T.A. - 102
16次文艺复兴博览会
12次
23每个人都被烧死了
18种思想和文字
12心灵花园
13我的背页
21没有名字的女孩
3.为什么
每天都会发生这种情况
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所以你想成为摇滚摇滚明星
你见过她的脸吗?
12 C.T.A. - 102
16次文艺复兴博览会
12次
23每个人都被烧死了
18种思想和文字
12心灵花园
13我的背页
21没有名字的女孩
3.为什么
每天都会发生这种情况
16 .不要招摇
13我的背页
12心灵花园
11位女士朋友
18岁的约翰·罗伯逊
1913雪糕文
我的问题是如何使代码的输出与文件中的输入相匹配?在我的代码中我需要修改什么?任何帮助都是非常感谢的!
发布于 2012-04-02 03:27:57
您不能(合理地)使用fscanf(),除非您知道您的所有行都是完全相同的正确格式。相反,我建议使用fgets()一次获取一行文本,然后解析该行(可能使用sscanf())。
例如,
char buf[1000];
while (fgets(buf, sizeof(buf), file) != NULL) {
sscanf(buf,"%d %[^\n]",&numb_tracks,album[i].tracks);
// etc
}您需要将对sscanf()返回值的检查添加到上面的示例中。
https://stackoverflow.com/questions/9970539
复制相似问题