我想要做的就是从文本文件中读取数字,对它们执行某些操作,然后继续。
文本文件的格式如下:
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]
...
我很困惑为什么要这样做......
答案 0 :(得分:3)
如果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]
答案 1 :(得分:0)
接受回答后
出现意外空白问题的症结只是读取文件输入的一个潜在问题。而不是逐个解决问题,而是使用更强大的错误处理。
在格式中使用"%n"
的节奏记录了扫描的偏移量,并提供了额外的信息来评估线的正确性。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fp;
char line[10];
int row,column,data;
fp = fopen("data.txt","rt");
while(fgets(line, sizeof line, fp) != NULL)
{
int n1, n2;
int cnt = sscanf(line," %n%d ,%d ,%d %n",
&n1, &row, &column, &data, &n2);
if (n1 > 0 && line[n1] == '\0')
Handle_Line_Is_Entirely_Whitespace();
else if (cnt != 3 || line[n2])
Handle_IncorrectlyFormattedLine();
else
printf("[Row: %d Column: %d Data %d]\n", row, column, data);
}
fclose (fp);
return 0;
}
更强大的方法是使用strtol()
来扫描int
。