缓冲输入遇到getchar()的while循环时,可能会造成循环没办法迭代,早早的就由于输入时键盘输入的回车键产生的换行符推出循环
例:
#include<stdio.h>
void coco(char op,int jk,int ed);
int main()
{
char ch;
int orw,ipl;
while((ch=getchar()) != '\n')
{
if(scanf("%d %d",&orw,&ipl)!=2) // Ensure that two readable items of type int are entered
break;
else
coco(ch,orw,ipl);
while(getchar()!='\n') //discard all character until the newline character
continue;
}
printf("Byb");
return 0;
}
void coco(char op,int jk,int ed)
{
int ae,ar;
for(ae=0;ae<jk;ae++)
for(ar=0;ar<ed;ar++)
printf(op);
}
在上面的代码中,有两条语句后面跟着注释,这两条都应该被注意,第一条是为了确保输入两个int类型的数字,使程序可以正确被运行。
第二条就是缓冲输入造成的循环里面以getchar()读取时读取到’\n’退出循环的错误的解决方法,使用一个while循环读取掉后面所有的其它字符(包括’\n’),让第一个while循环不会读取到缓冲输入带来的’\n’,从而退出循环