// 程序清单8.5.cpp : 定义控制台应用程序的入口点。
//带有一个较大的I/O问题的程序
//问题出现在缓冲区
#include "stdafx.h"
void dispaly (char cr ,int lines ,int width);
int _tmain(int argc, _TCHAR* argv[])
{
int ch;
int rows ,cols;
printf ("Enter a character and two integers:\n");
while ((ch = getchar ()) != '\n')
{
scanf ("%d %d",&rows,&cols);
dispaly (ch,rows,cols);
while ((getchar ()) != '\n')
/*这里为什么不能用while (ch != '\n');因为getchar ();只读取stdin流最前面的那个字符在赋值给ch,所以ch的值不会是回车(只要是最开始没有输入换行符),while ((getchar ()) != '\n')这句话是意思是getchar()每一次读取stdin流中字符和换行符比较(当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符,这也是为什么没有结束循环增量或减量也可让循环结束), 如果不是换行符就跳回while语句,如果是换行符结束循环*/
continue ;
printf ("Eenter another character and two integers :\n");
printf ("Enter a newline to quit .\n");
}
printf ("Bye .\n");
getchar ();
getchar ();
return 0;
}
void dispaly (char cr, int lines, int width)
{
int row ,col;
for (row = 1; row <= lines; row++)
{
for (col = 1; col <= width; col++ )
putchar (cr);
putchar ('\n');
}
}