【发布时间】:2014-09-20 20:17:26
【问题描述】:
我有一个格式如下的文本文件:
1 // Comment
2 // Comment
3
4 // Comment
5
6 // Comment
7 // Comment
8 // Comment
9
etc.....
我正在使用 C 尝试解析数字,同时完全忽略 cmets,并将整数读入数组。该数组具有预定大小,因此文本文件中的数字数量不会超过该大小。我刚开始学习 C,我尝试过将 fgets() 和 strtok() 与以下程序一起使用:
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
FILE *file;
char buf[1000];
if (argc == 2)
file = fopen(argv[1], "r");
else {
fprintf(stderr, "Incorrect number of arguments.\n");
return 1;
}
if (!file)
return 1;
while (fgets(buf, sizeof(buf), file) != NULL)
printf("%s\n", strtok(buf, "//"));
fclose(file);
return 0;
}
我还没有尝试将整数放入数组中,因为我仍在尝试以某种方式隔离数字。这是我的输出:
1
2
3
4
5
6
7
8
9
所以,我在处理数字后面的空白时遇到了麻烦。据我所知,可能有一种更简单的方法可以实现这一点,但这是我在搞砸了几个小时后得到的。我该如何解释这个空间,或者,有没有更好的方法来只解析这个文件中的整数并放入一个数组中?
【问题讨论】:
-
格式是否总是“数字[空格][可选注释]”?
-
您是否阅读过strtok(3) 的文档;你使用不正确!此外,使用所有警告和调试信息 (
gcc -Wall -g) 进行编译并使用调试器 (gdb) -
@templatetypedef 是的,格式总是数字[空格][可选注释]
-
格式到底是什么?是:
digits [non-digit-non-newline non-newlines] newline吗?那个空间也是可选的吗? -
@Deduplicator 首先是一个数字,后跟 3 到 4 个空格,具体取决于它是一位数还是两位数。然后是一个可选的注释,在注释之后的一个空格和不同长度的注释本身