尝试使功能一直运行到输入有效数字为止

时间:2018-10-31 08:46:06

标签: c++ while-loop

我正在尝试编写一个程序来计算给定数字的阶乘。但是,如果用户输入的数字小于或等于0,则我希望程序一直使用它,直到他输入的数字大于0。

#include <iostream>
using namespace std;
void facto(int a){
    int faktoriyel = 1;
    for(int i=1;i<=a;i++){
        faktoriyel *=i;
}
    cout << "The result:" << faktoriyel << endl;
}
int main(){
    int a;
    cout<<"Please enter a valid number:"; cin >> a;
    if(a<=0){
        cout<<"You entered an invalid number. Please try again.";
}
    while(a<=0);
    facto(a);
    return 0;

}

当我输入无效数字时,程序要求我重试,但我无法输入任何数字。所以我的问题是:

a)我该怎么办?

b)我的代码中有什么不清楚的地方吗?

c)如果我希望程序在我按Enter键之前向我提供输入数字的结果怎么办?我该怎么做? (就像,我希望它以6 24 120的顺序给我3 4和5的结果,然后按Enter结束程序)

2 个答案:

答案 0 :(得分:2)

这在这里不起作用:

while(a<=0);

;while循环的函数体。它本身不执行任何操作,也不影响前面的if循环。因此,基本上,结果是一个无限循环,如果a <= 0永远不会做任何事情。相反,请尝试以下操作:

int a;
cout<<"Please enter a valid number:"; cin >> a;
while(a<=0){
    cout<<"You entered an invalid number. Please try again.";
    cin >> a;
}

这两个语句现在位于while的正文中,并且应该可以按预期工作。

关于c),这需要进行一些修改,因为默认情况下cin不会仅仅因为您按Enter键就停止了阅读。您可以执行以下操作:

#include <iostream>
#include <string>
#include <sstream>
using namespace std;
void facto(int a){
    int faktoriyel = 1;
    for(int i=1;i<=a;i++){
        faktoriyel *=i;
    }
    cout << "The result:" << faktoriyel << endl;
}

int main() {
    cout << "Please enter a valid number:" << endl;
    std::string line;
    std::getline(cin, line);
    std::stringstream stream(line);
    int a;
    while (1) {
        stream >> a;
        if (!stream) {
            break;
        }
        if (a <= 0) {
            cout << "You entered an invalid number. Please try again." << endl;
        }
        else facto(a);
    }
}

答案 1 :(得分:1)

您可以花一段时间来验证您的电话号码的有效性:

while (a<=0){
    cout<<"You entered an invalid number. Please try again.";
    cin >> a;
}