c - Sscanf 读取一行两次?

标签 c io text-files scanf csv

我只想从文本文件中读取数字,对它们做一些处理,然后继续。

文本文件的格式如下:

0,0,16
0,3,17
0,4,10
...etc.

这是我的代码,只打印文本文件:

#include <stdio.h>
#include <stdlib.h>
FILE *fp;    

main()
{
        char line[10];
        int row,column,data;
        fp = fopen("data.txt","rt");
        while(fgets(line, 10, fp) != NULL)
        {
            sscanf(line,"%d,%d,%d\n",&row,&column,&data);
            printf("[Row: %d Column: %d Data %d]\n", row, column, data);
        }
        fclose (fp);
}

每当我运行它时,它每行输出两次所以它说

[Row: 0 Column: 0 Data 16]
[Row: 0 Column: 0 Data 16]
...

代替

[Row: 0 Column: 0 Data 16]
...

我很困惑为什么要这样做......

最佳答案

如果您的 data.txt 中的每条记录后都有空行,则检查 line[0] 是否为 '\n'

检查此代码是否适合您:

#include <stdio.h>
#include <stdlib.h>
FILE *fp;    

int main()
{
        char line[10];
        int row,column,data;
        fp = fopen("data.txt","rt");
        while(fgets(line, 10, fp) != NULL)
        {
            if(line[0] == '\n')
                continue;
            sscanf(line,"%d,%d,%d\n",&row,&column,&data);
            printf("[Row: %d Column: %d Data %d]\n", row, column, data);
        }
        fclose (fp);
        return 0;
}

输入文件data.txt:

0,0,16

0,3,17

0,4,10
1,2,3

输出:

[Row: 0 Column: 0 Data 16]
[Row: 0 Column: 3 Data 17]
[Row: 0 Column: 4 Data 10]
[Row: 1 Column: 2 Data 3]

关于c - Sscanf 读取一行两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26236060/

相关文章:

c 扫描文件夹中的新文件

serialization - 相当于 SWI Prolog 中的 Python 酸洗?

excel - 将 Excel 数据转换为具有固定列位置的文本文件

php - 对 HTML 表格中的文本文件中的数据进行排序

c - mbedtls 中的解密是如何工作的?

c - 在 C 函数中,char 和 string 有什么区别?

java - DataOutputStream.write(byte b[], int off, int len) 不抛出异常

java - 如何将屏幕截图发送到服务器而不存储在本地计算机中

c - 将文件中的数字读入数组

c - C中结构和指针的malloc