我试图确保我的输入字符串格式正确(格式正确XXX-X-XXX),但我不想使用char temp [255]和cin。 getline组合。
到目前为止,我已经成功地抓住了#34;除了这一个之外的所有例外:
输入登记牌:shjkf 22h 23jfh3kfh jkfhsdj h2j h2k 123-A-456
假设regPlate将从输入中获取所有字符串,包括末尾的正确格式字符串,它将打印字符串。这是不正确的。在读完第一个字符串后,它应该打印Bad输入,并且需要删除之后的所有内容。
我已尝试使用cin.clear()
,cin.ignore()
等。在我的 if 功能中但没有结果。
void main()
{
std::string regPlate;
do
{
cout << "Enter registration plate: ";
cin >> regPlate;
if (regPlate.size() < 9 || regPlate.at(3) != '-' || regPlate.at(5) != '-' || regPlate.size() > 9)
{
cout << "Bad entry" << endl;
}
} while (regPlate.size() < 9 || regPlate.at(3) != '-' || regPlate.at(5) != '-' || regPlate.size() > 9);
cout << endl << regPlate << endl;
system("pause");
}
答案 0 :(得分:0)
while循环是否有效,可能类似于:
int main(){
string regPlate;
while(regPlate.size() != 9 || regPlate.at(3) != '-' || regPlate.at(5) != '-'){
cout << "Enter registration plate: " << endl;
cin >> regPlate;
}
cout << regPlate;
return 0;
}
答案 1 :(得分:0)
使用您提供的示例(有一些假设)我运行您的代码,它似乎按预期工作。这是我跑的,包括标题。
#include <string>
#include <iostream>
using namespace std;
void main()
{
string regPlate;
do
{
cout << "Enter registration plate: ";
cin >> regPlate;
if (regPlate.size() != 9 || regPlate.at(3) != '-' || regPlate.at(5) != '-')
{
cout << "Bad entry" << endl;
}
} while (regPlate.size() != 9 || regPlate.at(3) != '-' || regPlate.at(5) != '-');
cout << endl << regPlate << endl;
system("pause");
}
我收到的输出是:
Enter registration plate: shjkf 22h 23jfh3kfh jkfhsdj h2j h2k 123-A-456
Bad Entry
Enter registration plate: Bad Entry
Enter registration plate: Bad Entry
Enter registration plate: Bad Entry
Enter registration plate: Bad Entry
Enter registration plate: Bad Entry
Enter registration plate: Bad Entry
Enter registration plate:
123-A-456
我还手动输入了您列出的所有值,它似乎也是这样工作的。
答案 2 :(得分:0)
感谢@Someprogrammerdude,我设法解决了这个问题。
只有我必须做的事情才是std::cin>>regPlate
才能使用std::getline(cin,regPlate)
std::string regPlate;
do
{
cout << "Enter registration plate: ";
std::getline(cin, regPlate);
if (regPlate.size() != 9 || regPlate.at(3) != '-' || regPlate.at(5) != '-')
{
cout << "Bad entry" << endl;
}
} while (regPlate.size() != 9 || regPlate.at(3) != '-' || regPlate.at(5) != '-');
cout << regPlate << endl;