2017-03-08 22 views
1

私はこのプログラムを書いています。ここでは、無効な入力後にユーザーに再度プロンプトを出す必要があります。私は、ユーザーが再入力後に別の無効な入力を入力した場合、それが継続することを発見するためだけに解決策に出た。誰かが私にこのより良い解決策を見せることができますか?私はとにかく持っていたものを紹介します:無効な入力の後で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

今回は@ WedVaneがあなたのために仕事をしましたが、詳細については[ask]ページをご覧ください。ありがとうございました。 –

答えて

0

DO-whileループの開始時にfound

do { 
    found = 0; 
    // ... 

をリセットしてください。定義されたときに初期化するだけでは不十分です。

関連する問題