0

如何使用 C++ 检查非数字输入?我正在使用 cin 读取浮点值,并且我想检查是否通过标准输入输入了非数字输入。我曾尝试使用 %d 指示符来使用 scanf,但我的输出已损坏。使用 cin 时,我得到了正确的格式,但是当我输入诸如“dsffsw”之类的字符串时,我得到了一个无限循环。注释代码是我尝试捕获浮点数,并将其类型转换为字符串,并检查它是否是有效的浮点数,但检查总是错误的。

我尝试使用在留言板上找到的其他方法,但他们想在 C 中使用 scanf 而不是在 C++ 中使用 cin。你如何在 C++ 中做到这一点?或者如果它不可行,则在 C 中。

while (!flag) {
        cout << "Enter amount:" << endl;
        cin >> amount;


    cout << "BEGIN The amount you entered is: " << strtod(&end,&pend) << endl;

        //if (!strtod(((const char *)&amount), NULL))   {
        //  cout << "This is not a float!" << endl;
        //  cout << "i = " << strtod(((const char *)&amount), NULL) << endl;
        //  //amount = 0.0;
        //}

        change = (int) ceil(amount * 100);

        cout << "change = " << change << endl;

        cout << "100s= " << change/100 << endl;
        change %= 100;
        cout << "25s= " << change/25 << endl;
        change %= 25;
        cout << "10s= " << change/10 << endl;
        change %= 10;
        cout << "5s= " << change/5 << endl;
        change %= 5;
        cout << "1s= " << change << endl;
        cout << "END The amount you entered is: " << amount << endl;
}
return 0;

}

4

2 回答 2

1
int amount;

cout << "Enter amount:" << endl;

while(!(cin >> amount)) {
   string garbage;
   cin.clear();
   getline(cin,garbage);
   cout << "Invalid amount. "
        << "Enter Numeric value for amount:" << endl;
}
于 2013-04-20T06:07:10.160 回答
0

我认为您的任务与所谓的防御性编程有关,其中一个想法是防止像您描述的那样的情况(函数需要一种类型,而用户输入另一种类型)。

我建议您使用返回流状态的方法来判断输入是否正确,即good()
所以我认为它看起来像这样:

int amount = 0;
while (cin.good()) {
        cout << "Enter amount:" << endl;
        cin >> amount;
于 2013-04-20T06:17:19.327 回答