Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C语言从文本文件中读取列_C - Fatal编程技术网

用C语言从文本文件中读取列

用C语言从文本文件中读取列,c,C,我有一个100行512列的文本文件,每列由一个选项卡分隔: row1 00 00 20 00 11 00 00 00 00 10 00 11 00 55 77 00 00 70 21 00 90 ... 我希望通读每一行并将值存储在数组中的每一列中。 我不想使用sscanf分离变量,因为它需要再创建500个变量。 如果我使用fgets,我可以得到整行,但是如何用空格分隔列并将它们存储在数组中 谢谢。我相信您可以使用带制

我有一个100行512列的文本文件,每列由一个选项卡分隔:

row1    00  00  20  00  11  00  00  00  00  10
        00  11  00  55  77  00  00  70  21  00
        90  ...
我希望通读每一行并将值存储在数组中的每一列中。

我不想使用
sscanf
分离变量,因为它需要再创建500个变量。
如果我使用
fgets
,我可以得到整行,但是如何用空格分隔列并将它们存储在数组中


谢谢。

我相信您可以使用带制表符分隔符的字符串标记器。这是一个可重入版本的。

可以用来将字符串的元素分隔为标记。您可以在循环中调用
strtok\u r
,调用每个令牌,并将令牌添加到行的数组中

strtok\u r
的使用模式与
strtok
的使用模式几乎相同,但它有一个额外的参数来表示标记器的当前状态。常规strtok将该状态保留在静态内存中,使函数不可重入

const char *term = "\t\n\r "; // word terminators
char str[] = "quick brown fox jumps over the lazy dog";
char *state; // Invocation state of strtok_r
char *tok = strtok_r(str, term, &state); // First invocation is different
while (tok) {
        printf("%s\n", tok);
        tok = strtok_r(NULL, term, &state); // subsequent invocations call with NULL
}
你可以用strtok


然后迭代每个单词

你能用strtok\r给我看一下代码的概述吗?我找不到足够的例子。我完全不理解strtok()和strtok_r()@user1390048之间的区别当然,请看一看。如果我把tok=strtok_r(NULL,term,和state)这行放进去,我不想读第一个元素(第1行);//后续调用在printf之前使用NU调用(“%s\n”,tok);最后一个元素打印了两次,如何更改代码?@user1390048您的更改看起来不错。我在循环之前添加了你添加的行,得到了正确的输出。如果你能把修改后的代码发布到pastebin.com,我会看一看。