鱼C论坛

 找回密码
 立即注册
查看: 2924|回复: 11

大家帮忙看一下,很短的程序

[复制链接]
发表于 2011-12-12 16:19:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 jialebihaidai 于 2011-12-12 22:57 编辑

#include<stdio.h>
void main()
{
    char c;
    do
    {
        printf("hello!\n");
        printf("again?(y/n)");
        scanf("%c",&c);
    }
    while(c == 'y'|| c =='Y');
    getch();
}


我想先输出hello,然后输入一个字符,如果输入的是'y'和'Y'则再次输出hello,
但是为什么它最多输出两次 hello 后就直接退出了?
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-12 16:56:57 | 显示全部楼层
  1. #include<stdio.h>
  2. void main()
  3. {
  4.     char c;
  5.     do
  6.     {
  7.         printf("hello!\n");
  8.         printf("again?(y/n)");
  9.         scanf("%c",&c);
  10.                 getchar();//吃掉缓冲区里的换行符
  11.     }
  12.     while(c == 'y'|| c =='Y');
  13.     getch();
  14. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-12-12 17:05:46 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-12 17:38:03 | 显示全部楼层
=、=其实我想说scanf换成c = getch();

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-12 18:22:13 | 显示全部楼层
  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.         char d;
  6.         cout<<"hello\n"<<"again?(y/n):";
  7.         cin>>d;
  8.         while(d=='Y'||d=='y')
  9.         {
  10.         cout<<"hello\n"<<"again?(y/n):";
  11.         cin>>d;
  12.         }
  13. return 0;
  14. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-12 19:14:11 | 显示全部楼层
  1. #include<stdio.h>
  2. void main()
  3. {
  4.     char c;
  5.     do
  6.     {
  7.         printf("hello!\n");
  8.         printf("again?(y/n)");
  9.         scanf("%c",&c);
  10.                 getchar();//吃掉缓冲区里的换行符
  11.     }
  12.     while(c == 'y'|| c =='Y');
  13.     getch();
  14. }
复制代码
这样才行啊
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-12 19:21:41 | 显示全部楼层
因为你第一次输入Y或y就已经退出循环了,第二次是执行的getchar(),所以才会退出
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-12 20:10:13 | 显示全部楼层
getchar(getch)
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-12 21:02:53 | 显示全部楼层
晕,这么多人帖代码。。。这题的关键在于我们使用的是带行缓冲的输入函数,所以你输入字符后要输入个换行才能将字符输入。但这样一来,换行符就留在了输入缓冲区里,以至于第二次你没有机会输入了(因为会自动把换行读出),所以每次输入完要再读一个字符,就是为了把输入缓冲区里的换行给去掉。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-12 22:26:10 | 显示全部楼层
这才是问题的关建,我也懂了
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-12-12 23:01:35 | 显示全部楼层
仰望天上的光 发表于 2011-12-12 21:02
晕,这么多人帖代码。。。这题的关键在于我们使用的是带行缓冲的输入函数,所以你输入字符后要输入个换行才 ...

谢谢!就是这里出了问题
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-12-12 23:06:31 | 显示全部楼层

这是一段测试程序,问题就出在输入输出缓冲区上,谢谢大家的回复
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-9 23:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表