读书人

for循环中加入scanf跟printf出错能帮

发布时间: 2013-11-18 00:11:49 作者: rapoo

for循环中加入scanf和printf出错,能帮忙看看不
#include<stdio.h>
#include<stdlib.h>
#define N 100
#define M 10
void main()
{
int a[M][N],i,p,q,n,m,j,b[M];
printf("请输入存入数组的行数");
scanf("%d",&n);

printf("请输入存入数组的列数");
scanf("%d",&m);

for(i=0;i<n;i++)
{
printf("请输入第%d的系数",i);
for(j=0;j<m;i++)
{
printf("请输入第%d的系数",i+1);
scanf("%d",&a[i][j]);
}
printf("请输入第%d的B系数",i);
scanf("%d",&b[i]);
}
for(i=0;i<n;i++)
{
for(j=0;j<m;i++)
{
printf("请输入%d",a[i][j]);
}
printf("%d\n",b[i]);
}
}

[解决办法]
使用scanf函数的时候注意I/O流中对于回车的处理,尤其在循环中
[解决办法]

引用:
谢谢大家的回复和帮忙,这个我是想在往两个数组中存放数据但是出现问题,谢谢你们的忙!
一楼“使用scanf函数的时候注意I/O流中对于回车的处理,尤其在循环中”这个问题怎么避免?
我那个按照四楼的说法改了下,但是输出是数据没放到数组中出错啦这是怎么回事
请输入存入数组的行数2
请输入存入数组的列数3
请输入第1的列系数1
22
21
请输入第1的B系数322
请输入第2的列系数1
2
2
请输入第2的B系数21
1 1 -858993460 -858993460 -858993460 -858993460 -858993460 -858993460 -8
58993460 -858993460 -858993460 0 0 0 798 438759246 6619235 6422627 668
4772 6226030 3473462 7340137 7471221 6684769 0 7274596 6881367 3407921
7798830 20 7864435 7536732 0 6881397 88 26 50 7536735 50 6357070 68
81396 50 7143535 108 0 0 7798895 0 0 0 0 0 0 0 0 请按任意键继续.
. .

getchar函数调用一次,吃掉每次输入时多余的一个回车符!
[解决办法]
printf里面的%和变量的一一对应关系
scanf里面的%和变量以及变量前加不加&的一一对应关系
是C代码中非常容易出错的地方,而且通常编译还不出错。
所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。

读书人网 >C语言

热点推荐