黑马程序员技术交流社区

标题: iOS C语言基础第5天的作业问题(循环) [打印本页]

作者: Chen_Mx    时间: 2016-1-8 16:21
标题: iOS C语言基础第5天的作业问题(循环)
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语言书的时候记得有个清理输入缓冲区,不知道是不是还得加一句清理)
高手指点,小弟感激不尽


作者: 学以致用表初衷    时间: 2016-1-8 19:57
这是我自己又写了一遍。你格式写的有点乱、
你没感觉你的括号十分的不舒服吗。
#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("下课");
}



作者: Chen_Mx    时间: 2016-1-8 20:34
清除缓冲区这句,太好了, 我记得有, 就是想不起来是怎么写的了。非常感谢。

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

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

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

谢谢支招哈。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2