0

标题可能听起来令人困惑,所以首先我将向您展示我的代码,我制作了这个简单的程序来获取两个输入值并将它们相乘,还有另一件事,但这并不重要,它可以正常工作:

#include <iostream>

using namespace std;

main()
{
    int a,b,c,d,e;
    char j = 4;
    cout << "Welcome to Momentum Calculator\n\n";
    cout << "------------------------------\n";
    cout << "Please Enter Mass in KG (if the mass in in grams, put \"9999\" and hit enter): \n\n";
    cin >> a;
    if (a==9999) {
        cout << "\nPlease Enter Mass in grams: \n\n";
        cin >> d;
    }
    else {
        d = 0;
    }
    cout << "\nPlease Enter Velocity \n\n";
    cin >> e;
    if (d == 0)
    {
        c = (a*e);
    }
    else {
        c = (e*d)/100;
    }
    cout << "\nMomentum = " << c;
    cin.get();
    cin.ignore();
    while (j == 4)
    {
        cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
        main();
    }
}

现在你可以看到,我的变量是一个 int(整数),我的问题是如果我输入一个英文字母 (az) 或任何不是数字的东西都会导致它以无限的速度无限地重复我的程序。我想要一个字符串/字符来查看我的 var "a" 是字母还是其他任何东西,但不知道该怎么做。我可以做到,但是,我希望用户在“a”中只输入一次,而我的让他再次输入。请帮忙 :)

4

3 回答 3

1

在 ctype 库中有一个叫做 isalpha 的函数,检查你的变量是否是字母,所以你可以使用 isalpha 函数。

于 2013-09-11T13:36:05.953 回答
1

标准库中的 isdigit 或 isalpha 对您有帮助吗?

PS 1KG 包含 1000 克,所以你应该除以 1000,而不是除以 100;

更新:似乎我理解你的问题......你需要 cin.clear(); 在 cin.get() 和 cin.ignore() 之前。否则这些调用不会做任何事情,因为 cin 处于错误状态。

于 2013-09-11T13:40:31.613 回答
0

我认为您可以将 a 作为字符串,并查看它是否包含英文字母,如果包含,请再次询问输入(您可以在 while 循环中进行)。当输入正确的输入时,解析它并找到它的数字。

于 2013-09-11T13:17:42.700 回答