2016-04-13 6 views
-2

これは、2項係数を計算するプログラムです。いいえ、私はk値を入力するとプログラムがクラッシュします。しかし、正しい値(n> k)を入力するためにk> nと入力すると、どうすればいいのでしょうか。正しい値を入力するとプログラムが停止します(n> k)。正しい値を入力するまで実行するC++ループ

#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); 

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

+0

ます。また 'のstd :: cin'の状態を確認する必要があります。読み込みに失敗した場合、数字ではないものを入力したとすると、無限ループに陥るでしょう。 'while(std :: cin && n> k)' – BoBTFish

+3

'* Not working *'は、問題の十分な説明ではありません。 *どのように動作しませんか?それはコンパイルされませんか?それはクラッシュしますか?永遠にループしますか?何か火がついた? – Biffen

+0

while(1) \t { \t \t cin >> n; \t \t cin >> k; (n> k) \t \t \t break; \t} これはあなたのために働くと思います。 –

答えて

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; 
} 
+0

入力が文字列の場合、これは機能しますか? –

+0

@bkVnet編集をご覧ください。 – sergej

+0

これは間違いなく、ユーザーが故意にまたは無意識にプログラムで何かを行うことができるため、より優れています。転ばぬ先の杖! –

関連する問題