百思不得其解的while用法,很简单,可是我就是不知道错在哪

来源:百度知道 编辑:UC知道 时间:2024/05/27 04:21:29
# include<stdio.h>
void main()
{
int n,b[40],d[40];char a[40],c[40];
scanf("%d",&n);
while (n--)
{
scanf("%c%d%c%d",&a[n],&b[n],&c[n],&d[n]);
printf("%c,%d,%c,%d",a[n],b[n],c[n],d[n]);
}

}
为什么输不出我输入的那几个呢?

while后面要是判断语句,你的n--是执行语句。没有任何判断的意思。
你可以改成
# include<stdio.h>
void main()
{
int n,b[40],d[40];char a[40],c[40];
scanf("%d",&n);
while (n>0)
{
scanf("%c%d%c%d",&a[n],&b[n],&c[n],&d[n]);
printf("%c,%d,%c,%d",a[n],b[n],c[n],d[n]);
n--;
}

}

你的错误不在于while,而在于忽视了回车键的问题.简单地说,回车键实际上是输入了两个字符,前一个字符被用来确认scanf输入结束,后一个字符仍保留在输入缓冲区内,导致被接下来的接收字符输入的语句接收到.
因此,要在scanf前面加上fflush(stdin);来清空输入缓冲区

printf("%c,%d,%c,%d",a[n],b[n],c[n],d[n]);

改成

printf("%c,%d,%c,%d\n",a[n],b[n],c[n],d[n]);

试一下.这是因为标准I/O库的缓冲问题,printf只有在接收到换行符或者EOF,程序退出时才真正将数据写出去,否则会一直存放在自己的缓冲区里。

# include<stdio.h>
void main()
{
int n,b[40],d[40];char a[40],c[40];
scanf("%d",&n);//n在0—39之间

while (n-->=0)
{

scanf("%c%d%c%d",&a[n],&b[n],&c[n],&d[n]);