scanf和printf只是在第一次之后跳过

scanf和printf只是在第一次之后跳过,c,C,这里有什么问题?scanf似乎无法在while循环中工作。我试图找出元音和辅音,直到用户需要 代码如下: #include <stdio.h> main() { char x,c; do { printf("enter\n"); scanf("%c",&x); if(x=='a'||x=='e'||x=='i'||x=='o'||x=='u') printf("vowel\n");

这里有什么问题?scanf似乎无法在while循环中工作。我试图找出元音和辅音,直到用户需要

代码如下:

#include <stdio.h>
main()
{
    char x,c;
    do
    {
        printf("enter\n");
        scanf("%c",&x);
        if(x=='a'||x=='e'||x=='i'||x=='o'||x=='u')
            printf("vowel\n");
        else
            printf("consonent\n");

        printf("do u want to continue ?(y/n)\n");
        scanf("%d",&c);
        if(c=='n')
            printf("thnks\n");

    } while(c=='y');
    return 0;
}
#包括
main()
{
字符x,c;
做
{
printf(“输入\n”);
scanf(“%c”、&x);
如果(x='a'| x=='e'| x=='i'| x=='o'| x=='u')
printf(“元音\n”);
其他的
printf(“辅音”\n);
printf(“您想继续吗?(是/否)\n”);
scanf(“%d”、&c);
如果(c=='n')
printf(“thnks\n”);
}而(c='y');
返回0;
}

您试图使用
%d
读取字符,这是错误的。改为使用
%c

您试图使用
%d
读取字符,这是错误的。改为使用
%c

将代码更改为
scanf(“%c”,&c)
您的原始代码将y/n条目作为数字而不是字符获取

编辑:

可能您得到的是克拉格返回值而不是字符尝试使用
getc
fgets
获得第一个字符。

将代码更改为
scanf(“%c”,&c)
您的原始代码得到的是以数字而不是字符形式的y/n条目

编辑:


可能您得到的是克拉格返回值而不是字符尝试使用
getc
fgets
来获得第一个字符。

我认为问题可能在这里: scanf(“%d”、&c); 应该是:

    scanf("%c",&c);

我认为问题可能在这里: scanf(“%d”、&c); 应该是:

    scanf("%c",&c);

以下是正确的代码:

#include <stdio.h>

int main()
{
    char x,c;
    do
    {
        printf("enter\n");
        scanf("%c",&x);
        getchar(); //to remove the \n from the buffer
        if(x=='a'||x=='e'||x=='i'||x=='o'||x=='u')
            printf("vowel\n");
        else
            printf("consonent\n");
        printf("do u want to continue ?(y/n)\n");
        scanf("%c",&c); //Here you were using %d instead of %c
        getchar(); //to remove the \n from the buffer

        if(c=='n')
            printf("thnks\n");
    }while(c=='y');

    return 0;
}
#包括
int main()
{
字符x,c;
做
{
printf(“输入\n”);
scanf(“%c”、&x);
getchar();//从缓冲区中删除\n
如果(x='a'| x=='e'| x=='i'| x=='o'| x=='u')
printf(“元音\n”);
其他的
printf(“辅音”\n);
printf(“您想继续吗?(是/否)\n”);
scanf(“%c”,&c);//这里您使用的是%d而不是%c
getchar();//从缓冲区中删除\n
如果(c=='n')
printf(“thnks\n”);
}而(c='y');
返回0;
}

以下是正确的代码:

#include <stdio.h>

int main()
{
    char x,c;
    do
    {
        printf("enter\n");
        scanf("%c",&x);
        getchar(); //to remove the \n from the buffer
        if(x=='a'||x=='e'||x=='i'||x=='o'||x=='u')
            printf("vowel\n");
        else
            printf("consonent\n");
        printf("do u want to continue ?(y/n)\n");
        scanf("%c",&c); //Here you were using %d instead of %c
        getchar(); //to remove the \n from the buffer

        if(c=='n')
            printf("thnks\n");
    }while(c=='y');

    return 0;
}
#包括
int main()
{
字符x,c;
做
{
printf(“输入\n”);
scanf(“%c”、&x);
getchar();//从缓冲区中删除\n
如果(x='a'| x=='e'| x=='i'| x=='o'| x=='u')
printf(“元音\n”);
其他的
printf(“辅音”\n);
printf(“您想继续吗?(是/否)\n”);
scanf(“%c”,&c);//这里您使用的是%d而不是%c
getchar();//从缓冲区中删除\n
如果(c=='n')
printf(“thnks\n”);
}而(c='y');
返回0;
}

请尝试使用此代码多次运行循环

编辑:不带
fflush(stdin)
的不同解决方案。请将8个字符的字符串定义为

char str[8];
并将循环中的代码修改为

fgets(str, 8, stdin); // To read the newline character
printf("do u want to continue ?(y/n)\n");

scanf("%c",&c);
fgets(str, 8, stdin); // To read the newline character

请尝试使用此代码多次运行循环

编辑:不带
fflush(stdin)
的不同解决方案。请将8个字符的字符串定义为

char str[8];
并将循环中的代码修改为

fgets(str, 8, stdin); // To read the newline character
printf("do u want to continue ?(y/n)\n");

scanf("%c",&c);
fgets(str, 8, stdin); // To read the newline character

两个扫描都应按如下方式更改:

scanf(" %c",&x);


请注意
%
前面的空格,这很重要:它使用前导空格,其中包括处理输入后
stdin
中剩余的尾行字符。

两个扫描都应如下更改:

scanf(" %c",&x);



请注意
%
前面的空格,这很重要:它使用前导空格,其中包括处理输入后
stdin
中剩余的结束行字符。

为什么不使用
fgets(buf,sizeof(buf),stdin)然后逐个字符地检查字符串?您的操作系统一次不会传递一个字符-它传递的是键入的字符,然后是(cr,cr/lf,lf)@H2CO3的版本-可能是因为他希望一次输入一个字符。可能会跳过[scanf()的重复项](以及许多、许多、更多)()@KevinDTimm抱歉…我的错误:)你为什么不干脆
fgets(buf,sizeof(buf),stdin)然后逐个字符地检查字符串?您的操作系统一次不会传递一个字符-它传递的是键入的字符,然后是(cr,cr/lf,lf)@H2CO3的版本-可能是因为他希望一次输入一个字符。可能会跳过[scanf()的重复项](以及许多、许多、更多)()@KevinDTimm抱歉…我的错误:)已修复。实际上,当提示输入y/n时,我正试图使用int和char进行修改。谢谢你的意见。第一次之后仍然不起作用。我相信您可能有问题,因为在此扫描中,您在符号后输入了换行符。尝试在第二次循环迭代和后续循环迭代中调试或打印c的值。等等。错误是什么?不明白他的两个扫描都是正确的。@GrijeshChauhan在我发布答案后他更改了源代码。我再次更改了有问题的内容。已修复。实际上,当提示输入y/n时,我正试图使用int和char进行修改。谢谢你的意见。第一次之后仍然不起作用。我相信您可能有问题,因为在此扫描中,您在符号后输入了换行符。尝试在第二个循环迭代和随后的循环迭代中调试或打印c的值。等等。错误是什么?不明白他的两个扫描都是正确的。@GrijeshChauhan他在我发布答案后更改了源代码。我再次进行了有问题的更改。如果返回cr/lf作为键怎么办?通常最好解释问题/提示解决方案而不是仅仅把它送人。特别是对于初学者提出的此类简单问题。如果返回cr/lf作为键怎么办?通常最好解释问题/提示解决方案,而不是仅仅给出答案。特别是对于初学者提出的这样简单的问题。虽然尝试过,但它打印的是辅音,而仅仅是th