2016-07-28 35 views
-1

我試圖創建一個程序,其中用戶輸入三個整數,另一個函數檢查他們的輸入是否有效。如果輸入無效,則用戶必須輸入三個新號碼。用戶輸入並使用函數來檢查它是否有效

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

然而,當我運行此代碼,進入三個有效的整數後沒有在終端顯示出來,代碼只有進入6點的整數後終止。 (還有其他的功能和代碼的主要功能,如果代碼是必須找到問題告訴我,我將它張貼。)

+2

爲什麼你將讀取變量傳遞給你的函數,然後再讀取另外3個數字? – mame98

回答

1

你的代碼和你的寫作部分不匹配.....

  1. 您應該檢查三個數字是有效還是無效先。
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 ( 「東西\ n」)的

else return 0;

,並看看會發生什麼

0

在main()你是德輸入三個數字a,b,c並將這些變量作爲sanitizedInput()的參數傳遞。

在這裏,而不是檢查變量,你再次使用scanf()將採取新的輸入。

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

上面的if條件不會檢查'a'的值,它會檢查scanf()的返回值爲'0'。

if語句應該是這樣的

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

這是相同的所有三個變量。

在主函數中,您將變量傳遞給sanitizedInput(),您正在檢查變量,如果無效,您再次輸入輸入,所以您更改的變量對於該函數而言是本地的,這不會反映在main )。所以要注意這一點。 希望這會幫助你。

0

在你while循環,你實際上調用scanf每個變量兩次(a,b,c),所以你6 times.When sanitizedInput(a,b,c)完成輸入數字,它返回0,所以check爲0,環路那兒過夜認爲你可以在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; 
} 
相關問題