Цикл C ++, который выполняется, пока я не введу правильные значения

Это программа, которая вычисляет биномиальный коэффициент. Нет, когда я ввожу для k значение, которое> n программы, происходит сбой. Но мне интересно, как я могу это сделать, когда я ввожу k> n программу, которая возвращает меня к вводу новых правильных значений (n> k). Программа останавливается, когда я ввожу правильные значения (n> k).

#include<stdio.h>
#include <iostream>
using namespace std;
int binomialCoeff(int n, int k)
{
// Base Cases
if (k==0 || k==n)
return 1;
else
return  binomialCoeff(n-1, k-1) + binomialCoeff(n-1, k);
}
int main()
{
int n,k;
cin >>n;
cin>>k;
printf("Value of C(%d, %d) is %d ", n, k, binomialCoeff(n, k));
return 0;
}

Может быть, с делать, пока цикл?
Что-то вроде этого:

do     {
cin >>n;
cin>>k;
}while(n>k);

Но этот цикл не работает.

-2

Решение

Что-то вроде этого?

int main()
{
int n, k;

do {
printf("Enter n and k values: ");
cin >> n >> k;
} while (n < k);

printf("Value of C(%d, %d) is %d ", n, k, binomialCoeff(n, k));
return 0;
}

Однако не должен binomialCoeff() просто вернись 0 если (n < k)?

int binomialCoeff(int n, int k)
{
if (k == 0 || k == n)
return 1;
else if (n < k)
return 0;
else
return  binomialCoeff(n - 1, k - 1) + binomialCoeff(n - 1, k);
}

Если вы хотите поймать входные данные, которые не являются целыми числами, попробуйте следующее:

#include <limits>
...

int main()
{
int n, k;

while (!(cin >> n) || !(cin >> k) || (n < k)) {
cout << "inavlid input! try again" << endl;
/* clear failbit */
cin.clear();
/* discard invalid input */
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}

printf("Value of C(%d, %d) is %d\n", n, k, binomialCoeff(n, k));
return 0;
}
1

Другие решения

Других решений пока нет …