我有这个简单的代码来从键盘读取矩阵。
#include<stdio.h>
#include"functii.h"
int main()
{
float a[50][50];
float t[50][50];
int n; //linii si coloanele
printf("\n Enter the rows and col of the matrix=");
scanf("%d", &n);
citireMatrice(a,n); //read the matrix
//afisareMatrice(a,n); //show the matrix
return 0;
}
使用functii.c
void citireMatrice(float x[50][50],int n)
{
int i,j;
for(i=0;i<n;++i)
{
for(j=0;j<n;++j)
{
printf("a[%d][%d]=",i,j);
scanf("%f ",&x[i][j]);
}
}
}
标题包含原型。 问题是,当我运行程序时,在输入第一个数字后,我得到一个没有文本的空行,允许我输入第二个数字,算法继续,而不是存储输入的最后一个数字。 它是这样的:
a[0][0]=1
2 //entered by me
a[0][1]=3
a[0][2]=1
a[1][0]=2
a[1][1]=3
a[1][2]=1
a[2][0]=2
a[2][1]=3
a[2][2]=4
1.000000 2.000000 3.000000
1.000000 2.000000 3.000000
1.000000 2.000000 3.000000
答案 0 :(得分:0)
@BLUEPIXY has already explained how to solve the problem。
原因是因为%f
之后的空格:
scanf("%f ",&x[i][j]);
//^ This space is the trouble-maker
空格是一个空白字符。让我们看看C11标准对此有何看法:
7.21.6.2 fscanf功能
[...]
- 由空白字符组成的指令通过读取第一个非空白字符(仍然未读取)的输入来执行,或者直到不再能够读取字符为止。该指令永远不会失败。
醇>
因此,空格字符消耗所有空白字符(如果有)直到第一个非空白字符。
当您输入要扫描的号码并按Enter键时,%f
中的scanf
会消耗该号码,而空格会丢弃换行符,然后等待....等待它遇到非空白字符。这就是为什么你必须为scanf
中的空格输入一个额外的数字来停止丢弃空格字符的原因。