1、cin>>和cin.get()
如下示例代码会到导致cin.get()语句被跳过,不等用户输入数据。
char ch;
int number;
cout << "Enter a number: ”;
cin >> number; // 读取整数
cout << "Enter a character: ";
ch = cin.get() ; // 读取字符
cout << "Thank You!\n";
在示例代码段中,当执行第 4 行时,用户输入一个数字,然后按回车键。假设输入的是数字 100。按回车键会导致一个换行符('\n')存储在键盘缓冲区(就是一块内存空间)数字 100 之后,如下图所示。
当第 4 行中的 cin>> 语句读取用户输入的数据时,它会在遇到换行符时停止,但是此时换行字符未被读取,而是仍保留在键盘缓冲区中。从键盘读取数据的输入语句只在键盘缓冲区为空时等待用户输入值,但现在不为空!
当第 6 行中的 cin.get ()函数执行时,它开始从先前输入操作停止的键盘缓冲区读取,并发现了换行符,所以它无须等待用户输入另一个值,直接就读取了之前剩下的那个换行符,导致无效的输入,进而直接执行了下面的函数。
这种问题最直接的解决办法是使用 cin