标题:为什么getchar()没用了?
只看楼主
zh77
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:84
专家分:22
注 册:2011-8-5
结帖率:100%
已结贴  问题点数:4 回复次数:10 
为什么getchar()没用了?
/*2011年8月18日12:15:58
求两个整数的最大公约数和最小公倍数
*/

# include <stdio.h>

int main(void)
{
    int f1(int ,int);
    int f2(int ,int);
    int a, b, c, d;
    char ch;
   
    do
    {
        printf("请输入两个整数: ");
        scanf("%d %d", &a, &b);
        
        c = f1(a, b);
        d = f2(a, b);
        printf("最大公约数为: %d\n最小公倍数为: %d\n", c, d);
        printf("是否继续?(y/n)\n");
        scanf(" %c",&ch);
    //    ch = getchar();//如果把上面的scanf注释掉 用这一行的getchar()就没用那个判断循环的效果 为什么呢?求大虾解释,O(∩_∩)O谢谢!
    } while (ch == 'y');
   
    system("pause");
    return 0;
}

int f1(int a, int b)
{
    int i;
   
    for (i=a; i>0; i--)
    {
        if (a%i == 0)
        {
            if (b%i == 0)
            {
                return i;
            }
        }
    }
   
}

int f2(int a, int b)
{
    int i;
   
    for (i=a;; i++)
    {
        if (i%a == 0)
        {
            if (i%b == 0)
            {
                return i;
            }
        }
    }
   
}

/*在VC++6.0中的输出结果:
请输入两个整数: 2 4
最大公约数为: 2
最小公倍数为: 4
是否继续?(y/n)
y
请输入两个整数: 2 3
最大公约数为: 1
最小公倍数为: 6
是否继续?(y/n)
n
请按任意键继续. . .
*/
搜索更多相关主题的帖子: include 公倍数 公约数 
2011-08-18 13:32
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
得分:2 
因为你在一开始的那个scanf函数是以回车符结尾的,而scanf读到回车符的时候只是判定输入结束,
并不把这个回车符读入,所以输入流中还有一个回车符,而后面直接用getchar函数会直接把之前的
那个回车符读进去,所以你根本没机会输入就跳过去了。

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-08-18 16:37
zh77
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:84
专家分:22
注 册:2011-8-5
得分:0 
回复 2楼 waterstar
不是的 我是把scanf注释掉以后用getchar() 发现getchar()不能读入字符  就是说 不能循环了  
2011-08-18 17:31
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
得分:0 
因为你前面还有这个 scanf("%d %d", &a, &b);
你可以试试下面这个,就会停住的
程序代码:
#include <stdio.h>

int main(int argc, const char *argv[]) {
    printf("Hi~ pretty girl!");
    getchar();
    return 0;
}
2011-08-18 17:37
QQ346957135
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:148
专家分:658
注 册:2011-8-9
得分:2 

参考代码:
程序代码:
int main(void)
{
    int f1(int ,int);
    int f2(int ,int);
    int a, b, c, d;
    char ch;
    
    do
    {
        printf("请输入两个整数: ");
        scanf("%d %d", &a, &b);
        
        c = f1(a, b);
        d = f2(a, b);
        printf("最大公约数为: %d\n最小公倍数为: %d\n", c, d);
        printf("是否继续?(y/n)\n");
        //scanf(" %c",&ch);
        getchar();
        ch = getchar();//如果把上面的scanf注释掉 用这一行的getchar()就没用那个判断循环的效果 为什么呢?求大虾解释,O(∩_∩)O谢谢!
        
    } while (ch == 'y');
    
    system("pause");
    return 0;
}

A real warrior never quits.
2011-08-18 19:54
daa20
Rank: 1
等 级:新手上路
帖 子:13
专家分:3
注 册:2011-8-17
得分:0 
我怎么感觉你更因该添上
#include <windows.h>
否则system函数不能调用吧!!
2011-08-18 20:24
daa20
Rank: 1
等 级:新手上路
帖 子:13
专家分:3
注 册:2011-8-17
得分:0 
do
    {
        printf("请输入两个整数: ");
        scanf("%d %d", &a, &b);
        
        c = f1(a, b);
        d = f2(a, b);
        printf("最大公约数为: %d\n最小公倍数为: %d\n", c, d);
        printf("是否继续?(y/n)\n");
        //scanf(" %c",&ch);//
        ch = getchar();//如果把上面的scanf注释掉 用这一行的getchar()就没用那个判断循环的效果 为什么呢?求大虾解释,O(∩_∩)O谢谢!
    } while (ch == 'y');
    我感觉如果把scanf语句去掉换成ch=getchar();当输入y时,ch得到就是字符串了,而不是简单的字符y啦,与while判断条件不符了,我是这么感觉不知道你是怎么看待的
2011-08-18 20:43
zh77
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:84
专家分:22
注 册:2011-8-5
得分:0 
回复 6楼 daa20
C里面是可以用的  C++不可以
2011-08-19 00:37
zh77
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:84
专家分:22
注 册:2011-8-5
得分:0 
回复 7楼 daa20
getchar()只能得到一个字符吧  怎么可能得到字符串 不管你怎么输入 应该只能得到一个字符 不然gets()岂不是成了废物?  看了别人的回复 我感觉是上面个scanf 遗留下的东西  我调试下
2011-08-19 00:39
zh77
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:84
专家分:22
注 册:2011-8-5
得分:0 
回复 楼主 zh77
先谢谢 大家了 我调试下
2011-08-19 00:41



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-347846-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.082771 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved