Попытка сохранить функцию, пока не будет введен правильный номер - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь сделать программу для вычисления факториала от заданного числа. Но если пользователь вводит число, которое меньше или равно 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;

}

Когда я ввожу неверный номер, программа просит меня повторить попытку, но я не могу ввести какие-либо числа. Итак, мои вопросы:

а) Как я могу это сделать?

б) Что-то неясно в моем коде?

в) Что если я бы хотел, чтобы программа выдала мне результаты введенных чисел, пока я не нажал кнопку ввода? Как мне это сделать? (Например, я хочу, чтобы он дал мне результаты 3 4 и 5 в порядке 6 24 120, а затем я нажимаю Enter, чтобы завершить программу)

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Вы можете использовать время, чтобы проверить правильность своего номера:

while (a<=0){
    cout<<"You entered an invalid number. Please try again.";
    cin >> a;
}
0 голосов
/ 31 октября 2018

Это здесь не работает:

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...