确保C++输入正确的字符串



>我试图确保我的输入字符串格式正确(格式正确 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;

相关内容

  • 没有找到相关文章

最新更新