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

标签 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);
}

最佳答案

请重置找到

do {
    found = 0; 
    // ...

在 do-while 循环的开始。定义时初始化它是不够的。

关于c - 在 c 中输入无效后重新提示用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42681379/

相关文章:

c - 指针地址位置

javascript - 实例化一个没有 'new' 的类

java - 迭代变量在for循环外是+1?

r - 如何将双循环结果存储在矩阵中,并将两个样本的观察结果作为行和列

javascript - 为 FOR 循环中的每个迭代添加一个暂停/间隔

javascript - 使用 javascript 在 html 表中生成每件商品的价格

c - 将 size_t 变量设置为 -1

c - 使用 fgets 和 strtok 时出现段错误

c - 需要帮助解决仅在 Linux 中发生的段错误

java - 打印 Java 数组的最简单方法是什么?