使用cin.ignore AFTER cin.get忽略额外的输入

  • 本文关键字:cin ignore AFTER get 使用 c++
  • 更新时间 :
  • 英文 :


系统会提示用户"输入中间首字母";。如果他们输入空格、全名,或者后面跟着句点"."的字母,会发生什么?我们如何使用cin.ignore修改程序以处理此问题?这是我目前拥有的代码:我评论了我遇到麻烦的地方。

#include <iostream>
#include <string>
using namespace std;
int main ()
{
string fname, lname;
char MI;
cout << "Please enter your first name: ";
cin >> fname;                                           
cout << "Please enter your middle initial: ";
cin.ignore(1, 'n');                                    
cin.get(MI);                                        
cout << "Please enter your last name: ";
//cin.ignore('n')
cin >> lname;
cout << "Your name is " << fname << " " << MI << " " << lname << endl;
return 0;
}

当我有另一个cin.ignore时,它仍然什么都不做,姓氏读取额外的输入。我试着添加了一些要读取的字符,但仍然无法解决问题。当我运行它时,它只是跳过姓氏的输入。我还尝试将姓氏输入更改为getline,但仍然没有执行任何操作。

您只需使用std::getlinestd::istringstream:

#include <iostream>
#include <string>
#include <sstream>
int main()
{
std::string fname, lname;
std::string MI;
std::cout << "Please enter your first name: ";
std::getline(std::cin, fname);
std::istringstream iss(fname);
iss >> fname;
do
{
std::cout << "Please enter your middle initial: ";
std::getline(std::cin, MI);
} while (MI.size() != 1);
std::cout << "Please enter your last name: ";
std::cin >> lname;
std::cout << "Your name is " << fname << " " << MI << " " << lname << std::endl;
return 0;
}

在这里,对于fname,我使用std::getline来获得用户输入,然后使用std::istringstream只获得输入中的一个单词。

对于MI,我将其设为字符串,直到用户不提供一个字符,程序才会继续。

并且lname部分是相同的。

您应该更改:

cin.ignore(1, 'n');                                    
cin.get(MI);                                        

简单地说:

cin >> MI;

operator>>忽略名字和中间首字母之间的任何空白,包括换行符。

在阅读MI之后,您可以使用以下内容忽略所有内容,直到下一个输入:

cin.ignore(numeric_limits<streamsize>::max(), 'n');

试试这个:

#include <iostream>
#include <string>
#include <limits>
using namespace std;
int main ()
{
string fname, lname;
char MI;
cout << "Please enter your first name: ";
cin >> fname;
cout << "Please enter your middle initial: ";
cin >> MI;
cin.ignore(numeric_limits<streamsize>::max(), 'n');
cout << "Please enter your last name: ";
cin >> lname;
cout << "Your name is " << fname << " " << MI << " " << lname << endl;
return 0;
}

最新更新