2016-09-26 10 views
-3

私は単純なプログラムを作って数値の階乗を計算しましたが、最後にプログラムを実行したいのです。 「続けるために任意のキーを押してください」と見るのではなく、「数字の階乗を見つけるために任意のキーを押してください」と表示します。私は単純なプログラムをCで作成しました。数値の階乗を計算します。

コード:

#include<stdio.h> 
int main() 
{ 
    int facto, i, m ; 
    m=1 ; 
    printf("Ener a Value : "); 
    scanf("%d", &facto) ; 
    for(i=facto-1 ; i>m ; i--) 
     facto *= i ; 
    printf("My Reg num:SP-16/BBS/033\nFactorial of the number : =%d\n", facto); 
    system ("pause") ; 
} 

答えて

3

"任意のキーを押して続行するには、"

この行は、あなたのsystem(pause)から来ています。あなたがしたい場合は、次の

1を..あなたがすべてのこの

#include<stdio.h> 
int main() 
{ 
    int facto, i, m ; 
    m=1 ; 
    printf("Ener a Value : "); 
    while(0 < scanf("%d", &facto) && facto > 0){ 
    for(i=facto-1 ; i>m ; i--) 
     facto *= i ; 
    printf("My Reg num:SP-16/BBS/033\nFactorial of the number : =%d\n",facto); 
    printf("press any key to find factorial of a number again : "); 
    } 
    return 0; 
} 
+1

を試してみてください?割り込みや同等のものは唯一意味のある方法ですか?コードは、少なくとも 'scanf()'からの戻り値をテストして、ユーザが 'a'を入力するかEOFを指定すると無限ループにならないようにする必要があります。 –

+0

@JonathanLeffler私はできるだけOPに似たプログラムを保つようにしました。だから私はscanfの戻り値をチェックせず、最後にループを終了するオプションを説明したのです。ユーザーが「正しい」データを入力する限り、これはうまく機能するはずです – CIsForCookies

+1

私は私の最初の質問で立っています:このプログラムをどうやって終了しますか?あるレベルでは、元のコードに保つのが良いですが、別のレベルでは、元のコードではエラーが無限ループするように変更しています。このような誤解が無限ループのような問題を引き起こさないようにするために、あなたに責任があります。したがって、役に立つ答えを提供するためにコードを修正する必要があります。 –

0

まずように、ループとのprintfを使用する必要があり、別のMSG

を印刷...他の階乗

2を見つけますあなたの質問はまだ不明であることを指摘しておきます。あなたが望む限り、プログラムを継続的に実行したいということを意味していたなら、私は要因発見コードをdo-whileループの中に置くことをお勧めします。 while条件は 'choice'変数に基づいています。 'choice'変数が 'n'の入力を受け取った場合(プログラムがある時点で終了しなければならないため)、コードは再実行を停止します。

#include <stdio.h> 

int main(void) { 
int facto, i, m ; 
char choice='y'; 

do{ 
    printf("Ener a Value : "); 
    scanf("%d", &facto); 
    m=1 ; 
    for(i=facto-1 ; i>m ; i--) 
    facto *= i ; 

    printf("My Reg num:SP-16/BBS/033\nFactorial of the number : =%d\n",facto); 
    printf("Press any key to find factorial of a number again"); 
    scanf("%c", &choice); 
    } while(choice!='n'); 

} 
+0

'scanf("%c "、&choice);'任意のキーを押してください "を待つことはありません。 – BLUEPIXY

+0

残っている改行をスキップするには、 'scanf("%c "、&choice)'を使う必要があることに注意してください。また、ユーザーがEOFを指定した場合に何が起こるか心配する必要があります。プログラムにノイズがあり、停止するのに時間がかかるようです。 –

0

あなたのコードは非常に単純明快です。私はそれを調整するために何もしていない。あなたには、いくつかのポイントになるまで何度も何度もプログラム全体を再実行しする場合は

しかし、あなたは常に特定の終了条件ループを使用して検討すべきです。

はどのように示すプログラムを終了します。この(プレスプログラムを終了しを入力し、他のがそれを繰り返すことになります)

#include<stdio.h> 
int main() 
{ 
    int facto, i, m ; 
    m=1 ; 
    do { 
     fflush(stdin); 
     system("cls"); 
     printf("Ener a Value : "); 
     scanf("%d", &facto) ; 
     getchar(); 
     for(i=facto-1 ; i>m ; i--) 
     facto *= i ; 
     printf("My Reg num:SP-16/BBS/033\nFactorial of the number : =%d\n", facto); 
     printf("press any key to find factorial of a number again (Enter to end): "); 
    } 
    while (getchar()!='\n'); 
} 
関連する問題