男人的大和种子 mp4:C语言问题,请问scanf("%c",&ch);这句为什么不读?

来源:百度文库 编辑:高校问答 时间:2024/04/28 12:38:20
程序代码如下,我调试结果不对,后来单步跟踪,发现原来读字符那句居然没停下来读而是直接跳过了,请问这是怎么回事?
#include<stdio.h>
#include<stdlib.h>
main()
{
int *p1,*p2,*p3;
int i,n;
char ch;
printf("qing shu ru jie shu:");
scanf("%d",&n);
p1=(int*)malloc(n*n*sizeof(int));
p2=(int*)malloc(n*n*sizeof(int));
p3=(int*)malloc(n*n*sizeof(int));
printf("qing shu ru ju zhen:\n");
for(i=0;i<n*n;i++)
scanf("%d",p1+i);
for(i=0;i<n*n;i++)
printf("%d,",*(p1+i));
printf("\n");
scanf("%c",&ch);
while(ch!='#')
{

for(i=0;i<n*n;i++)
scanf("%d",p2+i);
for(i=0;i<n*n;i++)printf("%d,",*(p2+i));
printf("\n");
if(ch=='+')
{
for(i=0;i<n*n;i++)
*(p3+i)=*(p1+i)+*(p2+i);
for(i=0;i<n*n;i++)printf("%d,",*(p3+i));
}
if(ch=='-')
{
for(i=0;i<n*n;i++)
*(p3+i)=*(p1+i)-*(p2+i);
}
p1=p3;
scanf("%c",&ch);
}
for(i=0;i<n*n;i++)
{
printf("%5d",*(p3+i));
if(i%n==n-1)printf("\n");
}
free(p1);
free(p2);
free(p3);
getch();
}
谢谢你,问题得到解决了,可是我还没明白为什么呢,能给我点解释吗~~ thank u~~~

scanf("\n%d",&n);
scanf("\n%c",&ch);
所有的scanf(),加\n.

那位的回答可以解决问题,但是正常的应该是在每个接收字符的scanf语句的前边加上一个getchar();

因为scanf语句在接受数字的时候不接受最后一个回车,所以当你执行了一个接受数字的scnaf之后,键盘缓冲区还有一个回车,因此当你再执行下一个接收字符的scanf语句后,它会先接受原来留下的那个回车,所以你必须加上一个getchar();“吸收”掉上次留下的回车。