A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

14. 老师问学生,这道题你会做了吗?
如果学生答"会了(y)",则可以放学.
如果学生不会做(n),则老师再讲一遍,再问学生是否会做了......直到学生会为止,才可以放学.
直到学生会或老师给他讲了10遍还不会,都要放学


我也的代码是这样的:

  1. #include <stdio.h>

  2. int main(int argc, const char * argv[]) {
  3.     char ch;
  4.     for (int i=1; i<=10; i++) {
  5.         printf("今天讲的会了吗?(会了输入y,不会输入n)\n");
  6.         scanf("%c",&ch);
  7.         if (ch=='y') {
  8.             printf("可以放学了\n");
  9.                    break;
  10.                    }else printf("再讲一遍,这是第%d遍\n",i);
  11.     }
  12.     return 0;
  13. }
复制代码

但是输入n 的时候(先不考虑输入的不是Y 和N)

下边输入的运行结果 是这样的。

今天讲的会了吗?(会了输入y,不会输入n)
n
再讲一遍,这是第1
今天讲的会了吗?(会了输入y,不会输入n)
再讲一遍,这是第2

今天讲的会了吗?(会了输入y,不会输入n)
我只输入了1次N,为什么第2遍没有让输入,直接就路过了。
(我以前看C语言书的时候记得有个清理输入缓冲区,不知道是不是还得加一句清理)
高手指点,小弟感激不尽

5 个回复

倒序浏览
这是我自己又写了一遍。你格式写的有点乱、
你没感觉你的括号十分的不舒服吗。
#include<stdio.h>
  int main(int argc, const char * argv[])
{
char ch;
ch='a';
for(int i=0;i<9;i++)
{
printf("你会吗?\n");
rewind(stdin);(清空缓冲区)
scanf("%c",&ch);
if(ch=='y')
{
printf("你太对了,下课吧");
break;
}
else
{
print("你太笨了,这都是第%d次说了",i);
}
}
printf("下课");
}


回复 使用道具 举报
清除缓冲区这句,太好了, 我记得有, 就是想不起来是怎么写的了。非常感谢。

大括号的话, 我之前 也是这样写的, 后来看视频是这个样子写的, 也是改了。刚开始也是别扭,
回复 使用道具 举报
学以致用表初衷 发表于 2016-1-8 19:57
这是我自己又写了一遍。你格式写的有点乱、
你没感觉你的括号十分的不舒服吗。
#include

清除缓冲区这句,太好了, 我记得有, 就是想不起来是怎么写的了。非常感谢。

大括号的话, 我之前 也是这样写的, 后来看视频是这个样子写的, 也是改了。刚开始也是别扭,(我回错位置了。这次对了)
回复 使用道具 举报
我看有的地方是可以用fflush(stdin)也是可以的
回复 使用道具 举报
lynn010 发表于 2016-1-10 11:19
我看有的地方是可以用fflush(stdin)也是可以的

谢谢支招哈。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马