如果输入是一个字母,则输出默认无限次

时间:2017-02-10 18:09:11

标签: c loops scanf

如果输入的数字不是1或2,则输入正确(默认)。如果ipnut是一封类似" a"而不是它开始垃圾邮件的默认情况。

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

int main()
{
    int v, kapcs = 0;
    printf("Szerinted Szaki Trisztan egy kocsog?\n1 Igen\n2 Nem\n");

    do
    {
        kapcs = 0;

        scanf("%d", &v);

        switch (v)
        {
            case 1:
                printf("Igen, o egy kocsog!");
                break;
            case 2:
                printf("Helytelen... O egy kocsog!");
                break;
            default:
                printf("NEM VALASZLEHETOSEG, VALASSZ: 1 VAGY 2\n");
                kapcs = 1;
                break;
        }

    }
    while (kapcs == 1);

    return 0;
}

2 个答案:

答案 0 :(得分:0)

scanf%d读取十进制数字。 'a',不是数字,留在输入流上,用于下一个循环 - 永远。如果您想要消耗'a',则必须在默认情况下添加一行代码才能使用它。

但是你怎么区分'a'和'3'?答案是scanf返回转换的参数数量。因此,对于'a',scanf将返回0,而对于'3',scanf将返回1.

int main()
{
    int v, kapcs = 0;
    printf("Szerinted Szaki Trisztan egy kocsog?\n1 Igen\n2 Nem\n");

    do
    {
        kapcs = 0;

        int cnt = scanf("%d", &v);

        switch (v)
        {
            case 1:
                printf("Igen, o egy kocsog!");
                break;
            case 2:
                printf("Helytelen... O egy kocsog!");
                break;
            default:
                printf("NEM VALASZLEHETOSEG, VALASSZ: 1 VAGY 2\n");
                kapcs = 1;
                if (cnt == 0)     /* if input was not a number */
                    getchar();    /* skip a character of input */
                break;
        }

    }
    while (kapcs == 1);

    return 0;
}

答案 1 :(得分:0)

当您输入的内容与scanf()中所需的格式不匹配时,该值将保留在输入缓冲区中。所以你可以做的是在你的默认情况下添加一个getchar()。

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

int main()
{
    int v, kapcs = 0;
    printf("Szerinted Szaki Trisztan egy kocsog?\n1 Igen\n2 Nem\n");

    do
   {
    kapcs = 0;

    scanf("%d", &v);

    switch (v)
    {
        case 1:
            printf("Igen, o egy kocsog!");
            break;
        case 2:
            printf("Helytelen... O egy kocsog!");
            break;
        default:
            printf("NEM VALASZLEHETOSEG, VALASSZ: 1 VAGY 2\n");
            kapcs = 1;
            getchar();
            break;
    }

}while(kapcs == 1);

return 0;
}

另外,为了支持我的论点,您可以执行以下操作:     #包括     #include

int main()
{
    int v, kapcs = 0;
    printf("Szerinted Szaki Trisztan egy kocsog?\n1 Igen\n2 Nem\n");

    do
   {
    kapcs = 0;

    scanf("%d", &v);

    switch (v)
    {
        case 1:
            printf("Igen, o egy kocsog!");
            break;
        case 2:
            printf("Helytelen... O egy kocsog!");
            break;
        default:
            printf("NEM VALASZLEHETOSEG, VALASSZ: 1 VAGY 2\n");
            kapcs = 1;
            printf("%c",getchar());
            break;
    }

}while(kapcs == 1);

return 0;
}

通过添加这个小的printf(),您会注意到getchar似乎没有等待输入。相反,它只是输出您刚刚在输入流中提供的字符。

P.S。 :请注意,这个答案只是&#39;为了对无与伦比的输入部分做出澄清。如果您输入的数字与您的案例不符,您需要小心。在这种情况下,只需检查scanf()转换是否成功,计算如下:

count=scanf("%d",&v);

然后将默认情况检入为:

if(count==0){
 getchar();
}