| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 675 人关注过本帖
标题:有请高手帮我看下错哪了?
只看楼主 加入收藏
冰鲜小鱼
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2008-4-2
收藏
 问题点数:0 回复次数:5 
有请高手帮我看下错哪了?
#include <stdio.h>
char get_choice ();
char get_first ();
float get_float (void);
float get_add () ;
float get_subtract () ;
float get_multiply ();
float get_divide () ;
main ()
{
int choice;
while ((choice = get_choice ())!= 'q')
      {
      switch (choice)
             {
               case 'a': get_add ();
                        break;
               case 's': get_subtract ();
                        break;
               case 'm': get_multiply ();
                        break;
               case 'd': get_divide ();
                        break;
               default : printf ("Program error!\n");
                        break;
              }
       }
printf ("Bye.\n");
return 0 ;
}

char get_choice (void)
{
int ch ;
printf ("Enter the operation for your choice:\n");
printf ("a. add           s.subtract\n");
printf ("m. multiply      d.divide\n");
printf ("q. quit\n");
ch = get_first ();
while (ch != 'a' && ch != 's' && ch != 'm' && ch != 'd' && ch != 'q')
      {
      printf ("Please respond with a, s, m, d, q.\n");
      ch = get_first();
      }
return ch ;
}

char get_first ()
{
int ch ;
ch = getchar () ;
while (  getchar () != '\n')
      continue ;
return ch ;
}

float get_float (void)
{
float input;
char ch ;
while (scanf("%f", &input) !=1)
      {
      while ((ch = getchar ()) != '\n')
           putchar (ch);
      printf (" is not an number.\n");
      printf ("Please enter a number, such as 2.5, -1.78E8, or 3: ");
      }
return input ;
}

float get_add ()
{
float m , n ;
printf ("Enter first number: ");
m = get_float ();
printf ("Enter second number: ");
n = get_float ();
printf ("%f + %f = %f\n\n", m, n, m+n);
return 0 ;
}

float get_subtract ()
{
float m , n ;
printf ("Enter first number: ");
m = get_float ();
printf ("Enter second number: ");
n = get_float ();
printf ("%f - %f = %f\n\n", m, n, m-n);
return 0 ;
}

float get_multiply ()
{
float m , n ;
printf ("Enter first number: ");
m = get_float ();
printf ("Enter second number: ");
n = get_float ();
printf ("%f * %f = %f\n\n", m, n, m*n);
return 0 ;
}

float get_divide ()
{
float m , n ;
printf ("Enter first number: ");
m = get_float ();
printf ("Enter second number: ");
n = get_float ();
while ( n == 0)
      {
      printf ("Enter a number other than 0: ") ;
      n = get_float () ;
      }
printf ("%f / %f = %f\n\n", m, n, m/n);
return 0 ;
}
搜索更多相关主题的帖子: 有请 
2008-10-12 00:25
冰鲜小鱼
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2008-4-2
收藏
得分:0 
这是一个+-*/运算的程序,可是在输入选项时会出现多运行一次
Please respond with a, s, m, d, q.
历时一个多钟仍查不出原因,烦~~~~~
貌似不是换行符的原因,例如输入aaa,还是同样会出现一次上面的情况
2008-10-12 00:37
冰鲜小鱼
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2008-4-2
收藏
得分:0 
补充一下:第一次进行选项的时候看起来很正常,但在第二次时问题就出来了
2008-10-12 00:46
守鹤
Rank: 4
来 自:山東臨沂
等 级:贵宾
威 望:12
帖 子:337
专家分:0
注 册:2008-6-20
收藏
得分:0 
char get_first ()
{
int ch ;
ch = getchar () ;
while (  getchar () != '\n')
      continue ;
return ch ;
}
注意:假如上来输入q的话,是没有问题的;
但当我们进行了运算,再输入q,此时ch=getchar()='\0'即上次敲入的回车
while (  getchar () != '\n')获取的先是q,然后再输入回车,就会出现提示了
Please respond with a, s, m, d, q.
收到的鲜花
  • 冰鲜小鱼2008-10-12 09:58 送鲜花  3朵   附言:我很赞同

多少个日日夜夜想起你,只希望有缘再次相见
2008-10-12 00:53
冰鲜小鱼
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2008-4-2
收藏
得分:0 
回复 4# 守鹤 的帖子
对对,是运行后才再次出现
Please respond with a, s, m, d, q.
的,可能是各个运算函数中没处理'\n',在运算后仍把'\n'留在输入队列中,我再调调。
2008-10-12 09:40
冰鲜小鱼
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2008-4-2
收藏
得分:0 
回复 4# 守鹤 的帖子
问题处理好了,果然是float get_float (void)的'\n'没处理掉,输入数值后仍把'\n'留在输入流中,处理方法是在float get_float (void)在再加多占位行:
while (getchar() != '\n')
     continue ;

非常感谢版主提醒了我 ,修改如下,就没出现上述问题了
float get_float (void)
{
float input;
char ch ;
while (scanf("%f", &input) !=1)
      {
      while ((ch = getchar ()) != '\n')
           putchar (ch);
      printf (" is not an number.\n");
      printf ("Please enter a number, such as 2.5, -1.78E8, or 3: ");
      }
while (getchar() != '\n')
     continue ;
return input ;
}
2008-10-12 09:49
快速回复:有请高手帮我看下错哪了?
数据加载中...
 
   



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

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