程序循环两次(打印语句两次)

时间:2015-03-04 08:21:47

标签: c while-loop

我正在尝试创建一个用户应该输入字符'a'的简单程序。它应该循环直到输入'a'。如果没有正确的输入,我会打印一条声明。如果输入了错误的字母或数字,还有另一种说法,但问题是这导致程序多次循环并且多次打印语句。任何帮助解决这个问题都是值得赞赏的。

#include <stdio.h>

int main()
{
    char input;
    int i, len,num;
    len = 1;

    do
    {
        puts("Please enter alphabet 'a': ");
        scanf("%c", &input);
        for(i=0; i<len; i++)
        {
            if(isalpha(input)==0)
            {
                printf("Please input something.\n");
                continue;
            }
            if(input == 'A' || input == 'a')
            {
                printf("Congratulations! You successfully input letter 'a'.");
                return(0);
            }
            else
            {
                printf("That's not letter 'a'.");
            }
        }
    }
    while(1);
}

2 个答案:

答案 0 :(得分:1)

在第一次输入之后缓冲区中有一个换行符,它没有被刷新,并且在第二次迭代中被%c拾取。

scanf()更改为

scanf(" %c", &input);

请注意占用换行符

%c之前的空格

答案 1 :(得分:1)

问题是输入字符后,按下换行符,然后发送到输入缓冲区。现在,下一次调用scanf()时,它会从缓冲区读取值'\n'scanf(),从而将其存储到input。现在,这可以通过@Gopi指出的方法轻松解决,但有更好的方法。这是代码。

#include <stdio.h>
#include<ctype.h>

int main()
{
    char input,ch;

    do
    {
        puts("Please enter alphabet 'a': ");
        scanf("%c", &input);
        while( input!='\n' && (ch=getchar())!='\n' && ch!= EOF);   // look here

            if(isalpha(input)==0)
            {
                printf("Please input something.\n");
                continue;
            }
            if(input == 'A' || input == 'a')
            {
                printf("Congratulations! You successfully input letter 'a'.");
                return(0);
            }
            else
            {
                printf("That's not letter 'a'.");
            }

    }
    while(1);
}

现在使用语句while((ch=getchar())!='\n' && ch!= EOF);,所有字符(如'\n')都只是刷新而不存储到input,从而解决了问题。

另请注意,此处不需要for循环,此代码无用(除非这不是您的原始代码,其中还有其他部分)。