Sscanf-从文件中读取所有数字-C

问题描述 投票:1回答:1

我想使用.txtsscanf文件中读取所有数字。在主要功能中,我用.txt打开了fopen( name.txt, "r")文件。以下代码仅读取第一个字符串和第一个数字,但我无法对其进行迭代:


    int test(FILE *file){
    int l = 0;
    char buffer[256];
    char *poi = NULL;
    while(fgets(buffer, 256, file) != NULL){
        poi = buffer;
        for(;*poi != '\n'; poi++){
            sscanf(buffer, "%[^0-9]%d", zahl[l].buf, &zahl[l].number);
            l++;
        }
    }

例如:

.txt文件中的以下文本:

In 2019 we had 200 accidents
In 2020 we had 199 accidents

上面的代码只能读取2019和2020,而不能读取200或199-我如何告诉sscanf继续扫描直到出现新行'\n'

c scanf
1个回答
2
投票

几件事:

  • 您总是从buffer的开头进行扫描,需要从poi进行扫描(兴趣点?)
  • 您需要将poi提前读取的字符数
  • buffer中可能不存在换行符>
  • 第二点,您可以使用%n获取到目前为止读取的字符数。

这样,您就可以像这样结束循环:

    while (*poi) {
        int nc;
        if (2 == sscanf(poi, "%[^0-9]%d%n", zahl[l].buf, &zahl[l].number, &nc))
            poi += nc;
        else
            break;
        l++;
    }
© www.soinside.com 2019 - 2024. All rights reserved.