// 程序清单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'); } }