-2

二項係数を計算するプログラムです。いいえ、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 whileループ?このようなもの:

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

しかし、このループは機能していません。

4

1 に答える 1

1

このようなもの?

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;
}
于 2016-04-13T07:30:06.317 に答える