我正在尝试编写一个程序来计算给定数字的阶乘。但是,如果用户输入的数字小于或等于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结束程序)
答案 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;
}