2016-07-28 6 views
-1

ユーザーが3つの整数を入力するプログラムを作成しようとしていて、別の関数がその入力が有効であるかどうかをチェックしています。入力が有効でない場合、ユーザーは3つの新しい番号を入力する必要があります。私はこのコードを実行すると ユーザー入力を受け取り、関数が有効かどうかを確認する

#include <stdio.h> 
int sanitizedInput(int a, int b, int c) 
{ 
    if(scanf("%d", &a)==0) 
    { 
     printf("Not a number\n"); 
     return 1; 
    } 
    else if(scanf("%d", &b)==0) 
    { 
     printf("Not a number\n"); 
     return 1; 
    } 
    else if(scanf("%d", &c) == 0) 
    { 
      printf("Not a number\n"); 
      return 1; 
    }     
    else 
     return 0; 
} 
int main() 
{ 
    int a; 
    int b; 
    int c; 
    int check = 1; 

    do 
    { 
     check = 0; 

      printf("Enter a number:"); 
      scanf("%d",&a); 
      printf("Enter a number:"); 
      scanf("%d",&b); 
      printf("Enter a number:"); 
      scanf("%d",&c); 

      check = sanitizedInput(a,b,c); 
    }while(check); 
} 

はしかし、3つの有効な整数を入力した後は何も、端末に表示されず、コードは6つの整数を入力した後に終了します。 (そのコードは、問題は私に教え見つける必要があると私はそれを投稿する場合は、main関数内の他の機能とコードがあります。)

+2

なぜ読み込み変数を関数に渡してから、別の3つの数値を読みますか? – mame98

答えて

1

あなたのコードとあなたの文章の一部が一致していない.....

  1. は、次の3つの数字が有効であるかをまず確認する必要があります。そのうちの一つが無効である場合
    int sanitizedInput(int a, int b, int c) 
    { 
        if(a==0 || b==0 || c==0) 
        { 
         return 1; 
        } 
        else 
        { 
         printf("They are valid.....\n"); 
         return 0; 
        } 
    } 
    

はその後、あなたは 1の戻り値のために別の三つの入力を取ることができるようになります。 while(1)trueのためです。

0

 printf("Enter a number:"); 
     scanf("%d",&a); 
     printf("Enter a number:"); 
     scanf("%d",&b); 
     printf("Enter a number:"); 
     scanf("%d",&c); 

を削除し、check = sanitizedInput(a,b,c);に滞在し、のprintfを追加します

else return 0;ブロック

、あなたはTAKある)(メインで

0

を何が起こるか見に( "何か\ nを") 3つの数字a、b、cの入力を行い、これらの変数をsanitizedInput()の引数として渡します。

ここでは、変数をチェックする代わりに、新しい入力を受け取るscanf()を使用しています。

if(scanf("%d", &a)==0) 

上記条件が「A」の値をチェックしない場合、それは「0」と)scanf関数の戻り値を(チェックします。

文は、これはすべての3つの変数に同じである。この

if(a==0) 
     scanf("%d",&a); 

ようにする必要があります。

main関数では、変数をsanitizedInput()に渡しています。変数をチェックしていて、有効でない場合は、入力を再度取っているので、変更した変数はその関数にとってローカルです。 )。だからそれに注意してください。 これがあなたを助けてくれることを願っています。あなたのwhileループでは

0

、あなたが実際に終了した6 times.When sanitizedInput(a,b,c)あなたのためので、入力数、scanfを2回、各変数(a,b,c)を呼び出し、それは0を返す。そうcheckは0で、ループはあなたができると思いますover.Iですあなたのmainにして実行します。

int main 
{ 
    int a; 
    int b; 
    int c; 
    int check = 0; 
    do 
    { 
     check = sanitizedInput(a,b,c); 
     printf("check = %d\n",check); 
    }while(!check); 
    return 0; 
} 
関連する問題