我正在用一些不起作用的例子来更新它。scanf一直在请求一些它不应该请求的输入。
int n = 0, i = 0, j = 0;
double a[DIM][DIM];
do
{
printf("Give the dimension n: ");
scanf("%d", &n);
}while(n < 2 || n > DIM);
printf("n: %d\n", n);
printf("Give matrix A:\n");
for(i = 0; i < n; i++)
{
printf("Row %d:\n", i+1);
for(j = 0; j < n; j++)
{
printf("\tCol %d: ",j+1);
scanf("%lf", &a[i][j]);
}
}
printf("Workin");输入示例:
Give the dimension n: 2
n: 2
Give matrix A:
Row 1:
Col 1: 1.0
Col 2: 2.0
Row 2:
Col 1: 3.0
Col 2: 4.0你知道为什么这不管用吗?我可能太傻了,不是吗?
发布于 2015-01-18 01:37:51
scanf()会忽略空格,因此请尝试单独使用它们
void consumeSpaces()
{
int chr;
while ((chr = fgetc(stdin)) && (isspace(chr) != 0));
ungetc(chr, stdin);
}
int main()
{
int i, j, n;
double a[DIM][DIM];
do
{
printf("Give the dimension n: ");
scanf("%d", &n);
} while (n < 2 || n > DIM);
printf("n: %d\n", n);
printf("Give matrix A:\n");
consumeSpaces();
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
consumeSpaces();
scanf("%lf", &a[i][j]);
}
}
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
printf("a[%d][%d] -> %f\n", i, j, a[i][j]);
}
}
return 0;
}发布于 2015-01-18 00:46:43
你确定这是一个无限循环吗?代码在我看来没问题,但是你的双循环会执行很多次。例如,如果n为19,则外循环将执行19次,而内循环将为外循环的每次迭代执行19次,总共执行361次。
发布于 2015-01-18 00:47:47
我建议您从scanf读取的数据太短或数字格式错误。如果获得坏数据,scanf将继续读取,直到获得好数据,但在某种程度上这是非常令人困惑的。通常使用fgets()和sscanf()。
https://stackoverflow.com/questions/28001688
复制相似问题