测试使用IDE:Code::Blocks
先放结果
#include <stdio.h>
#define N 20
int main()
{
int a[N],n,i=0;
printf("Input the array:");
do
{
scanf("%d",&a[i]);
i++;
}while(getchar()!='\n');
n = i;
printf("The result:");
for(i=0;i<n;i++)
{
printf("%4d",a[i]);
}
return 0;
}
尝试过的几种失败方法及其原因:
while循环控制结构在使用getchar进行判断是否读取结束时,会先取出缓冲区中的第一位,再进行scanf的读取,所以输出结果会缺少第一位。
#include <stdio.h>
#include <stdlib.h>
#define N 20
int main()
{
int a[N],n,i=0;
printf("Input the array:");
while(getchar()!='\n')
{
scanf("%d",&a[i]);
i++;
}
n = i;
printf("The result:");
for(i=0;i<n;i++)
{
printf("%2d",a[i]);
}
return 0;
}
而do-while循环会先执行一次循环内代码,再进行判断,根据scanf函数的特点,会略过空格回车这类字符直接读取输入的值。
写作业的debug,偶然发现,此为记录原因。