一个c语言输出语句输出的异常

来源:百度知道 编辑:UC知道 时间:2024/06/24 13:42:19
#include <stdio.h>
void main()
{
int n,max,i;
int j=1; //用j来记下是第几个数最大。
printf("每输入一个数以回车结束!!!!!!\n\n\n\n");
printf("请输入第 1个数: ");
scanf("%3d",&max);
for(i=2;i<10;i++) //若直接在这定义i,则出错。原因未知。
{
// int j=1; 若在这定义j,则j为局部变量,在输出函数处不是它的作用范围。
printf("请输入第%3d个数: ",i);
scanf("%3d",&n);
if(max<n)
{
max=n;
j=i;
}

}

printf("\n\n\n");
printf("10个数中最大的一个是%3d !\n",max);
printf("%3d 是第%3d 个数 !\n\n\n",max,j);

}

要是各个数的输入以空格分开,则输出语句:printf("请输入第%3d个数: ",i);
会在最后一起输出.这是为什么?

#include <stdio.h>
void main()
{
int n,max,i;
int j=1;
printf("每输入一个数以回车结束!!!!!!\n\n\n\n");
printf("请输入第 1个数: ");
scanf("%3d",&max);
for(i=2;i<10;i++) /*若直接在这定义i,则出错。原因:c语言允许在复合语句的开头定义变量,即在for循环大括号里的首部定义变量没有问题,但不可以在for后的小括号里,在c++中是允许的。 */
{
printf("请输入第%3d个数: ",i);
scanf("%3d",&n);
if(max<n)
{
max=n;
j=i;
}

}

printf("\n\n\n");
printf("10个数中最大的一个是%3d !\n",max);
printf("%3d 是第%3d 个数 !\n\n\n",max,j);

}
如果以空格分隔,输入的数并不是直接被scanf函数接收,而是先放在缓冲区,在回车键之后一块交由函数处理。比如输入1 (空格)1(空格) 1(空格) 1 (空格) 1(空格)1(空格)1(空格)1(空格)1(空格)1Enter(回车)先由第一个scanf接受第一个1,接收之后打印“请输入第2个数”,scanf接收第2歌1,在打印“请输入第3个数”,其结果就是输出语句都打印到一起,因为中间并没有东西对他们加以分隔。