这个问题以前有人问过,但我从来没有找到一个明确而简单的答案,所以我再问一次......

我想知道,在不使用 stdio.h 之外的任何其他库的情况下,如何检查用户输入的内容是否为数值。基本上,要求用户输入一个介于 0 和 9 之间的值。如果数字介于这两者之间,则继续。例如,如果数字是 12,它会循环回到问题并再次询问数字。

它工作正常,除了如果我输入一个字母或一个十进制数字,它会进入一个无限循环......

基本上这是我的问题:我如何检查输入的值不是字符和非十进制?

这是代码的开头:(对不起,它是法语,但你明白了......)

int main()
{

int nb1, nb2, rand_1, rand_2;
int nb_coups = 0;
int points = 0;

printf("\n\n                     ------ BIENVENUE A LA GRANDE ROUE ! ------\n\n");

do{
    //Saisie 1er nombre

    printf("Entrez le premier nombre choisi (entre 0 et 9) : ");
    scanf("%d",&nb1);

    //Tant que le 1er nombre n'est pas compri entre 0 et 9, on le redemande
        while(nb1<0 || nb1>9)
        {
            printf("Nombre incorrect. Entrez le premier nombre choisi (entre 0 et 9) : ");
            scanf("%d",&nb1);
        }
    //On affiche le 1er nombre
    printf("Le nombre choisi est : %d\n\n",nb1);

最佳答案

使用 fgets 和 sscanf:

char line [16];

fprintf(stderr, "Entrez le premier nombre choisi (entre 0 et 9) : ");
fgets (line, sizeof(line), stdin);
ret = sscanf(line,"%d",&nb1);

//Tant que le 1er nombre n'est pas compri entre 0 et 9, on le redemande
while((ret == 0) || (nb1 < 0) || (nb1 > 9)) {
    fprintf(stderr, "Nombre incorrect. Entrez le premier nombre choisi (entre 0 et 9) : ");
    fgets (line, sizeof(line), stdin);
    ret = sscanf(line,"%d",&nb1);
}

关于c - C语言中如何检查数值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7758017/

10-11 21:02