这是从文件“F1.txt”
读取矩阵10x10的代码#include <stdio.h>
int main( int argc, char ** argv ) {
FILE * fr;
fr = fopen("F1.txt","r");
int i, j;
int matrix[10][10] = {0.0};
for(i = 0; i < 10; i++)
{
for(j = 0; j < 10; j++)
{
fscanf(fr, "%d",&matrix[i][j]);
printf("%d\n", matrix[i][j]);
}
}
getchar();
return 0;
}
“F1.txt”如下所示:
12 343 34 544 43 32 124 52 212 3
12 343 34 544 43 32 124 52 212 3
12 343 34 544 43 32 124 52 212 3
12 343 34 544 43 32 124 52 212 3
12 343 34 544 43 32 124 52 212 3
12 343 34 544 43 32 124 52 212 3
12 343 34 544 43 32 124 52 212 3
12 343 34 544 43 32 124 52 212 3
12 4 34 56 43 32 124 52 212 3
32 343 34 544 43 32 7 52 456 98
它没有问题,但输出是:
12
343
34
544
43
32
124
52
212
3
12
343
34
544
43
32
124
52
212
..........
etc....
我必须检测行尾以使我的输入与F1.txt中的输入相同
12 343 34 544 43 32 124 52 212 3
12 343 34 544 43 32 124 52 212 3
12 343 34 544 43 32 124 52 212 3
12 343 34 544 43 32 124 52 212 3
12 343 34 544 43 32 124 52 212 3
12 343 34 544 43 32 124 52 212 3
12 343 34 544 43 32 124 52 212 3
12 343 34 544 43 32 124 52 212 3
12 4 34 56 43 32 124 52 212 3
32 343 34 544 43 32 7 52 456 98
答案 0 :(得分:4)
以下列方式重写循环
for(i = 0; i < 10; i++)
{
for(j = 0; j < 10; j++)
{
fscanf(fr, "%d",&matrix[i][j]);
printf("%3d ", matrix[i][j]);
}
printf( "\n" );
}
答案 1 :(得分:2)
您正在正确读取数据,但您没有正确打印。您的程序会在每个字符后插入'\n'
,这就是您看到这么多行的原因。
像这样更改您的程序以查看您期望的输出:
for(i = 0; i < 10; i++)
{
for(j = 0; j < 10; j++)
{
fscanf(fr, "%d",&matrix[i][j]);
printf("%d ", matrix[i][j]); // <<== Replace \n with a single space
}
printf("\n"); // <<== Add this line
}
答案 2 :(得分:2)
或者,如果您只想格式化输入,可以在i
的外部循环中编写行尾。
for(i = 0; i < 10; i++)
{
for(j = 0; j < 10; j++)
{
fscanf(fr, "%d",&matrix[i][j]);
printf("%d\t", matrix[i][j]);
}
printf("\n");
}
答案 3 :(得分:0)
根据您的了解,EOL通常是LF
字符或CR-LF
个字符的组合。在C中,它们分别由\n
或\r\n
表示。
一种可能的解决方案是,您可以使用fgets
一次读取完整的一行(fgets
只会自行读取一行)。然后使用sscanf
或strtok
如果您知道每行中的整数数量,建议您使用sscanf
。
否则,如果某行可以包含任意数量的数字,那么您可以使用strtok
" "
(空格)作为分隔符。
答案 4 :(得分:0)
fscanf(fr, "%d",&matrix[i][j]);
printf("%d", matrix[i][j]);
if(j < 10-1)
printf(" ");
else
printf("\n");