在c中输入无效后重新提示用户

时间:2017-03-08 20:32:04

标签: c arrays for-loop while-loop

我在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 :(得分:0)

请重置found

do {
    found = 0; 
    // ...
在do-while循环开始时。在定义时初始化它是不够的。