[C语言]C语言小白求解答

feitianqixia 2018-02-24 09:24:06
char sex;
int count = 0;
for (;;)
{
printf("请输入性别:");
scanf("%c",&sex);
fflush(stdin);
if (sex != 'm' && sex != 'M' && sex != 'f' && sex != 'F')
{
break;
}
count++;
}
printf("您一共输入正确%d次\n", count);
为什么输入字符f后按回车,程序直接跳出循环结束了?求解答,谢谢
...全文
956 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fxmmua 2018-11-15
  • 打赏
  • 举报
回复
引用 楼主 feitianqixia的回复:
char sex;
int count = 0;
for (;;)
{
printf("请输入性别:");
scanf("%c",&sex);
fflush(stdin);
if (sex != 'm' && sex != 'M' && sex != 'f' && sex != 'F')
{
break;
}
count++;
}
printf("您一共输入正确%d次\n", count);
为什么输入字符f后按回车,程序直接跳出循环结束了?求解答,谢谢
没有进去for 循环的条件
赵4老师 2018-02-26
  • 打赏
  • 举报
回复
在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。
//请今后要用
char c;
scanf("%c",&c);
//时,都改为
char s[2];
char c;
scanf("%1s",s);
c=s[0];
//自动跳过一个或多个空格或Tab字符或回车换行,读取下一个字符。
自信男孩 2018-02-26
  • 打赏
  • 举报
回复
int main(void)
{
    char sex;
    int count = 0;
    for (;;)
    {
        printf("请输入性别:");
        scanf("%c",&sex);
        getchar();
        if (sex != 'm' && sex != 'M' && sex != 'f' && sex != 'F')
        {
            break;
        }
        count++;
    }
    printf("您一共输入正确%d次\n", count);
    return 0;
}
参考一下吧 因为fflush(stdin);没有起作用。该fflush对于stdin是未定义的。即它不能起到刷新输入缓冲区的作用。建议用getchar();但是这个需要每次只能输入一个字符然后换行,否则结果也是未定义的。
snailzzw 2018-02-25
  • 打赏
  • 举报
回复
应该是没用getchar(),这个错误很常见,用它吃空格!
言术 2018-02-25
  • 打赏
  • 举报
回复
scanf("%c",&sex); getchar();
www_adintr_com 2018-02-24
  • 打赏
  • 举报
回复
回车不属于 'm' 'M', 'f', 'F' 自然就 break 结束了呀

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧