C,loop中,读取输入字符后,在if的语句中出错,请求帮助

#include <stdio.h>
#include <math.h>

float grade, ttlgrade = 0;
int count = 0;
char opt;
void AverageGrade(float grade);

int main()
{
	while(1)
	{
		printf("Do you want to enter another grade?(Y or N)\n");
		scanf("%c", &opt);
		if (opt == 121 || opt == 'Y')
		{
			break;
		}
		else if (opt == 'n' || opt == 'N')
		{
			printf("Program Ended.\n");
			break;
		}
		else
		{
			printf("Invalid input! Please re-enter!\n");
			continue;
		}
	}

	return 0;
}

各位好!我是超级小白,遇到了问题想请求大佬帮助!这是我的代码的一部分,以提示用户选择是否要输入其他成绩。 我在第一次循环输入“ a”,如下面的截图所示,得到了正确的响应。

然后,代码应该引导用户在第二个循环中输入‘opt’ 的值; 但是,我的代码不允许我在第二个循环中输入‘opt’的值,直接跳到了第三个循环,我在下面附加了屏幕截图,

它打印了两次“ Invalid ... Do ...”。 在第三个循环中,倒允许我输入变量‘opt’的值了,我输入了’N‘。 它给了我算是正确的反馈。

有没有大神能指点下我为什么,哪些地方有问题啊,谢谢!拜谢!

在终端输入z(回车)后,scanf("%c",&ch)读取到两个字符,一个是你输出的‘N’,一个是回车符,需要修改成:

scanf("%c%*c",&ch);这样就可以了。如有帮助,请采纳一下,谢谢。

缓存导致的。scanf读取的是缓存区中的内容。

#include <stdio.h>
#include <math.h>
float grade, ttlgrade = 0;
int count = 0;
char opt;
void AverageGrade(float grade);
int main()
{
    while(1)
    {
        printf("Do you want to enter another grade?(Y or N)\n");
        scanf("%c", &opt);
        if (opt == 121 || opt == 'Y')
        {
            break;
        }
        else if (opt == 'n' || opt == 'N')
        {
            printf("Program Ended.\n");
            break;
        }
        else
        {
            printf("Invalid input! Please re-enter!\n");
            continue;
        }

      fflush(stdin);//清除缓存
    }
    return 0;
}

scanf("%c", &opt);
前面加一行代码
fflush(stdio);
scanf("%c", &opt);

 

缓冲流里读入的是 a+换行

改成scanf(" %c",&opt);全面加个空格

或者 scanf后面加上getchar();

您的问题已经有小伙伴解答了,请点击【采纳】按钮,采纳帮您提供解决思路的答案,给回答的人一些鼓励哦~~

ps:开通问答VIP,享受5次/月 有问必答服务,了解详情↓↓↓

【电脑端】戳>>>  https://vip.csdn.net/askvip?utm_source=1146287632
【APP 】  戳>>>  https://mall.csdn.net/item/52471?utm_source=1146287632