2017-03-08 63 views
1

我正在用c寫這個程序,我需要在無效輸入後重新提示用戶。我來到一個解決方案,只發現如果用戶在重新提示後輸入另一個無效輸入,那麼它會繼續。有人能告訴我一個更好的解決方案嗎?我會告訴你我有反正:在c輸入無效後重新提示用戶

#include <stdio.h> 
#include <ctype.h> 

main() 
{ 
    int ctr; // loop counter 
    int custID[10] = {1, 3, 5, 9, 10, // ID array 
         6, 4, 7, 8, 2}; 
    double custBal[10] = {153.56, 1300.45, 684.45, 990.45, 45.54, // Balance array 
         1100.34, 594.45, 1340.45, 1000.00, 1134.00}; 
    int IDsearch; // For interaction 
    int found = 0; // Search criteria 
    int inner, outer, tempID, didSwap; // For sorting the arrays 
    double tempBal; 
    char ans; 

    /* Firs step: Sort the arrays for efficiency */ 
    for(outer = 0; outer < 9; outer++) // <9 and not <10, because 9 numbers will be bubble sorted 
    {         // the highest (10th) will remain at the bottom 
     didSwap = 0;     // Turns one after the arrays sort 
     for(inner = outer; inner < 10; inner++) 
     { 
      if(custID[inner] < custID[outer]) // Ascending sort 
      { 
       tempID = custID[inner];  // Must include both, 
       tempBal = custBal[inner];  // otherwise the arrays wont be linked 
       custID[inner] = custID[outer]; 
       custBal[inner] = custBal[outer]; 
       custID[outer] = tempID; 
       custBal[outer] = tempBal; 
       didSwap = 1;     // Flag that a swap took place 
      } 
     } 
     if(didSwap == 0) 
     { 
      break; 
     } 
    } 
    /* Second step: Interacting with the program */ 
    printf("***Customer Balance Search***\n"); 
    do 
    { 
     printf("Which ID number do you want to check?\n"); 
     scanf(" %d", &IDsearch); 

     for(ctr = 0; ctr < 10; ctr++) 
     { 
      if(IDsearch == custID[ctr]) 
      { 
       found = 1; 
       break; 
      } 
     } 
     if(found) 
     { 
      if(custBal[ctr] < 1000) 
      { 
       printf("\nCustomer #%d has a balance of $%.2f.\n", custID[ctr], custBal[ctr]); 
       printf("Credit is good!\n"); 
      } 
      else 
      { 
       printf("\nCustomer #%d has a balance of %.2f.\n", custID[ctr], custBal[ctr]); 
       printf("Credit is bad! No more credit!\n"); 
      } 
     } 
     else 
     { 
      printf("\nCustomer #%d was not found!\n", IDsearch); 
      printf("Please enter a correct ID number!\n\n"); 
      continue; 
     } 
     printf("\nDo you want to search another ID number?\n"); 
     printf("Enter (Y)es or (N)o\n"); 
     scanf(" %c", &ans); 
     ans = toupper(ans); 
    } 
    while((found != 1) || (ans == 'Y' && ans != 'N')); 
    printf("\nExiting...\n\n"); 

    return (0); 
} 
+1

請格式化? –

+0

@SouravGhosh我是新來的編程和新的stackoverflow。你需要什麼,請原諒我的無知。 –

+0

對。這一次@WeatherVane爲你做了這項工作,但請參閱[問]頁面獲取更多指導。謝謝。 –

回答

0

請重置found

do { 
    found = 0; 
    // ... 

在do-while循環的開始。定義時初始化它是不夠的。