确保在C ++

时间:2017-01-05 18:37:35

标签: c++ string format stdstring istream

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

3 个答案:

答案 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;