C 允许用户在输入错误选项后再次尝试输入

C 允许用户在输入错误选项后再次尝试输入,c,C,我有一些生成一组随机数的代码。之后,它会询问用户是否希望生成另一组随机数。我遇到的问题是,我希望用户只输入y表示是,或输入n表示否,如果他们没有将这些输入到选项中,请告诉他们这是无效的输入,然后重试。我不知道怎么做。代码如下: // C program for generating a // random number in a given range. #include <stdio.h> #include <stdlib.h> #include <string.

我有一些生成一组随机数的代码。之后,它会询问用户是否希望生成另一组随机数。我遇到的问题是,我希望用户只输入y表示是,或输入n表示否,如果他们没有将这些输入到选项中,请告诉他们这是无效的输入,然后重试。我不知道怎么做。代码如下:

// C program for generating a
// random number in a given range.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

// Generates and prints 'count' random
// numbers in range [lower, upper].
void printRandoms(int lower, int upper,
                            int count) {
    int i;

    printf("\nGenerated Numbers:\n");
    for (i = 0; i < count; i++) {
        int num = (rand() %
        (upper - lower + 1)) + lower;
        printf("%d ", num);
    }
}

int main() {
    int lower, upper, count;
    char c='y';

    do {
        printf("Minimum number size:\n");
        scanf("%d", &lower);
        printf("\nMaximum number size:\n");
        scanf("%d", &upper);
        printf("\nAmount of numbers to be generated:\n");
        scanf("%d", &count);

        // Use current time as
        // seed for random generator
        srand(time(0));

        printRandoms(lower, upper, count);

        printf("\n\nGenerate new set? (y/n)\n");
        scanf(" %c",&c);
        printf("\n");
        if (c=='n'){
            exit(0);
        }
        do {
            printf("Please enter valid input!\n");
            scanf(" %c", &c);
            if (c=='n'){
              exit(0);
            }
        } while (c!='y'||c!='n');

    } while(c=='y');

    return 0;
}
//用于生成
//给定范围内的随机数。
#包括
#包括
#包括
#包括
//随机生成并打印“计数”
//范围内的数字[下,上]。
无效打印随机数(整数下限、整数上限、,
整数计数){
int i;
printf(“\n生成的数字:\n”);
对于(i=0;i

任何帮助都将不胜感激。

这回答了您的问题,但另一方面,我通常喜欢将条件放在第一个问题中,因此如果用户输入零,则应用程序将退出

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

// Generates and prints 'count' random
// numbers in range [lower, upper].
void printRandoms(int lower, int upper,
                            int count) {
    int i;

    printf("\nGenerated Numbers:\n");
    for (i = 0; i < count; i++) {
        int num = (rand() %
        (upper - lower + 1)) + lower;
        printf("%d ", num);
    }
}

int main() {
    int lower, upper, count;
    char c='y';

    do {
        printf("Minimum number size: ");
        scanf("%d", &lower);
        printf("\nMaximum number size: ");
        scanf("%d", &upper);
        printf("\nAmount of numbers to be generated: ");
        scanf("%d", &count);

        // Use current time as
        // seed for random generator
        srand(time(0));

        printRandoms(lower, upper, count);

        printf("\n\nGenerate new set? (y/n)\n");

        do {
            printf("\t\t==> ");
            scanf(" %c", &c);
            c &= 0x5f;          // convert to uppercase

            if (c=='N') exit(0);
            } while (c != 'Y');

        } while (1);

    return 0;
}
#包括
#包括
#包括
#包括
//随机生成并打印“计数”
//范围内的数字[下,上]。
无效打印随机数(整数下限、整数上限、,
整数计数){
int i;
printf(“\n生成的数字:\n”);
对于(i=0;i”;
scanf(“%c”、&c);
c&=0x5f;//转换为大写
如果(c=='N')退出(0);
}而(c!=“Y”);
}而(1),;
返回0;
}

除非检查返回,否则无法正确使用任何输入功能。尤其是使用
scanf
时,必须检查
EOF
是否小于请求的转换次数,以指示匹配或输入失败。在下一次输入之前,您必须从输入流中进一步清空导致匹配失败的任何违规字符,否则,导致失败的字符将保持未读状态,只是等待在下一次尝试输入时再次咬您。和