>我试图确保我的输入字符串格式正确(格式正确 XXX-X-XXX),但我不想使用 char temp[255] 和 cin.getline 组合。
到目前为止,我已经设法"捕获"了除此异常之外的所有异常:
输入车牌: shjkf 22h 23jfh3kfh jkfhsdj h2j h2k 123-A-456
假设 regPlate 将从输入中获取所有字符串,包括末尾正确格式化的字符串,它将打印字符串。这是不正确的。读取第一个字符串后,它应该打印错误的输入以及之后需要删除的所有内容。
我尝试在我的 if 函数中使用 cin.clear()
、cin.ignore()
等,但没有结果。
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");
}
一段时间循环工作,也许是这样的:
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;
}
使用您提供的示例(有一些假设),我运行了您的代码,它似乎按预期工作。这是我运行的内容,包括标题。
#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
我还手动输入了您列出的所有值,它似乎也可以这样工作。
@Someprogrammerdude我设法解决了这个问题。
我唯一要做的就是使用std::getline(cin,regPlate)
而不是std::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;