【问题标题】:Reading in data from a string in C (like scanf)从 C 中的字符串中读取数据(如 scanf)
【发布时间】:2011-02-02 18:02:00
【问题描述】:

我已经读入并存储了一个我正在处理的数据文件到一个 char 数组数组中,文件中的每一行都有一个 char 数组,我现在想要处理各个行。但是我不确定如何执行此操作。

我这样读每一行:

/* Read the whole file into an array */
char read_lines[FILE_LENGTH][FILE_WIDTH];
for(i=0;i<FILE_LENGTH;i++) {
    fscanf(data_file, "%[^\n]", read_lines[i]);
    fscanf(data_file, "%[\n]", dump);
}

我需要读取格式为 %d\t%d\t%d\t%d\t%d 的每一行中的数据,但我不确定如何将特定变量读入 scanf功能。我知道 fscanf() 从文件中读取,而 scanf() 从用户输入中读取,有没有从变量中读取的函数?

我来自 python 背景,在 python 中,我只会使用以下代码:

read_lines = open('file.txt').readlines()
for line in lines:
    i = lines.index(line)
    first[i], second[i], third[i], forth[i], fifth[i] = line.split('\t')

我真的不知道如何在 C 语言中做同样的事情。我做了相当多的研究,但我找不到任何有用的东西。任何帮助将不胜感激!

谢谢!

【问题讨论】:

    标签: c scanf


    【解决方案1】:

    也许可以查看sscanf。它就像它的表亲 scanffscanf 一样,但取而代之的是一个字符串。这是上面链接的一个片段。

    sscanf 函数接受一个字符串来读取输入,然后,以类似于 printf 和相关函数的方式,它接受一个模板字符串和一系列相关参数。它尝试使用类似 printf 的转换说明符将模板字符串与其正在读取输入的字符串匹配。

    【讨论】:

    • 啊啊啊!非常感谢,sscanf 似乎没有出现在我的搜索中,这正是我需要的。
    【解决方案2】:

    您可以使用 strtok 函数 [阅读手册页] 来拆分字符串

    例如http://www.gnu.org/s/libc/manual/html_node/Finding-Tokens-in-a-String.html

    【讨论】:

    • 谢谢,这非常有用,我将来可能会使用它,但我认为在 C 中使用 sscanf() 可能是一个更简单的选项,而我选择在 python 中使用 split() 因为它那里是更简单的选择。
    • @Durand 你可以在 python 中做类似的事情——而且,你提供的 python 代码不会自动将字段解释为整数
    • 是的,你需要使用:first[i],second[i],third[i],four[i],fifth[i] = [int(i) for in line。拆分('\t')]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-17
    • 1970-01-01
    • 2014-09-05
    相关资源
    最近更新 更多