天天看点

C++ cin被跳过

问题:

今天写代码发生了第二个cin被跳过的情况,原来是因为我的第一个cin,输入的是文件路径,较长,自动换行了,也就产生了两次换行(\n),所以第二个cin发现有换行就不等待输入了,直接存了一个空的内容。

解决方法:cin.ignore()

basic_istream<Elem, Tr>& ignore(
    streamsize _Count = 1,
    int_type _Delim = traits_type::eof( )
);
           

把缓冲区内从当前字符开始到_Delim 之前字符_Count个 忽略掉。

例如:

#include <iostream>
int main( ) 
{
   using namespace std;
   char chararray[10];
   cout << "Type 'abcdef': ";
   cin.ignore( 5, 'c' );
   cin >> chararray;
   cout << chararray;
   return 0;
}
           

输入 :abcdef

输出:def

输入:abbbbbcdef

输出:bcdef

5和c先到哪个就忽略之前的。

解决方法:

cin.ignore(1000, '\n')
           

清除之前缓冲区中'\n'的干扰。即可

具体代码:

string fileFolderPath;
	cin >> fileFolderPath;//之前路径太长产生两个'/n'

	cin.ignore(1000, '\n');//消除影响

	cout << "输入文件后缀名:如jpg" << endl;
	string fileExtension;
	cin >> fileExtension;
           

继续阅读