2016-10-10 15 views
0

を実行しているからプログラムを防ぐだから私はこの問題は、プログラムが文句を言わないで実行することであるscanf関数は

#include <stdio.h> 

int main() 
{ 
    int num1, num2; 

    scanf("%d%d", &num1, &num2); 

    if (num1 > num2) 
     printf("The min is:%d\n ", num2); 
    else 
     printf("The min is:%d\n ", num1); 
return 0; 
} 

、coderunnerを使用して、このプログラムを書きました。それは、このことを示す保持し、それがしばらく後に停止:scanf関数を削除

running

は、問題を修正し、私はscanf関数を使用して他のプログラムを試してみたのだが、大丈夫でした。何か案は?

+1

はあなたには、いくつかの入力を入力して、何が起こるか見てみましたがありますか? –

+0

プログラムは実際には起動しないので、何も入力できません。 – Demha

+2

は2つの数字を入れた後に私のために働く。 '22 23' –

答えて

2

scanf()はどのように解釈されると思いますか? 123または1232を2つの整数として?あなたが入力したすべての数字は、最初に%dで "食べられ"、次にscanf()は2番目の文字を待つでしょう。

あなたは、いくつかの分離、またはそれらの間のいくつかの非数値文字を使用する必要があります

scanf("%d/%d", &num1, &num2); 

をこれには二つの数値の間にスラッシュを期待するscanf()に指示します。あなたは空白を(コメントの中で指摘されているように書式文字列には何も書かずに)使うこともできます。

また、あなたは数字に頼る前に、戻り値をチェックする必要があります

if(scanf("%d %d", &num1, &num2) == 2) 
{ 
} 
+0

ユーザーが何も押さずに2桁の整数を2つ使用する方法はありますか? (スペースや入力のように) – Demha

+0

@Demha定義上、 'scanf'は入力が特定の方法でフォーマットされていることを期待しています。つまり、ユーザはあなたが望むフォーマットを知る必要があります。 任意の入力を処理する場合は、 'stdin'で' fgets'を使用し、入力文字列を 'sscanf'で解析し、エラーの戻り値をチェックする必要があります。 'scanf'は、これらの2つの関数の制限された組み合わせの一種であり、それらを別々に使用すると、不正な形式の入力をどのように処理するかを選択できます。 – djrollins

+0

@djrollins説明をありがとう! – Demha

関連する問題