xuanyuan14
驱动中牛
驱动中牛
  • 注册日期2002-03-07
  • 最后登录2003-01-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1700回复:19

怪谈

楼主#
更多 发布于:2002-05-27 22:34
我知道我很菜,可是我还是想弄个明白,请各位编程大虾指教:
#include\"stdio.h\"
void main()
{
char op;
       float num1,num2;

   printf(\"num1=\");
scanf(\"%f\",&num1);
printf(\"num2=\");
scanf(\"%f\",&num2);
     printf(\"the operation is  \");
       scanf(\"%c\",&op);
printf(\"\\n\");
switch(op)
{
case\'+\':
printf(\"num1+num2=%f\\n\",num1+num2);
break;
case\'-\':
printf(\"num1-num2=%f\\n\",num1-num2);
break;
case\'*\':
printf(\"num1*num2=%f\\n\",num1*num2);
break;
case\'/\':
if(num2==0)
{
printf(\"Devided by Zero!\\n\");
break;
}
printf(\"num1-num2=%f\\n\",num1/num2);
break;
default:
printf(\"Unknown operator\\n\");
}

}


我始终想不明白结果。问题出在
scanf(\"%c\",&op); ,这句压根就不执行。
把%c改成%s程序就没问题了。可是书上明明写着%c也可以呀!
很弱智的问题,大侠们灌水灌累了,不防想想,也挺有意思的。
好好学习,天天时尚!
xuanyuan14
驱动中牛
驱动中牛
  • 注册日期2002-03-07
  • 最后登录2003-01-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-05-27 22:36
在VC下和TURBO C下调试都是一个结果,真的很奇怪,谁能指点一下呀!
好好学习,天天时尚!
magicx
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2014-08-18
  • 粉丝1
  • 关注0
  • 积分-14分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-05-27 23:23

问题不怪,你提怪! ;)

为进一步,确定原因,把多余成分(语句),都去掉先!

 :P

[color=red]大头鬼! :P[/color]
Deer
驱动大牛
驱动大牛
  • 注册日期2002-04-30
  • 最后登录2008-05-06
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-05-28 08:05
因为执行scanf(\"%f\",&num2);时还有一个字符(\\xa)留在键盘缓冲区。
所多执行一次
scanf(\"%c\",&op);
就OK了。
heshen
驱动老牛
驱动老牛
  • 注册日期2002-04-19
  • 最后登录2014-01-26
  • 粉丝0
  • 关注0
  • 积分45分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-05-28 08:23
高手!
(\\xa)是什么?
不要啊!
Deer
驱动大牛
驱动大牛
  • 注册日期2002-04-30
  • 最后登录2008-05-06
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-05-28 08:26
(\\xa)就是换行符呀
xuanyuan14
驱动中牛
驱动中牛
  • 注册日期2002-03-07
  • 最后登录2003-01-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-05-28 18:00
因为执行scanf(\"%f\",&num2);时还有一个字符(\\xa)留在键盘缓冲区。
所多执行一次
scanf(\"%c\",&op);
就OK了。


请问高手,那为什么用%s的时候没有这问题呢,虽然%s是字符串,但也应该从键盘缓冲区读,那也应该从换行符开始呀,它为什么不呢?
好好学习,天天时尚!
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-05-28 18:03
[quote]因为执行scanf(\"%f\",&num2);时还有一个字符(\\xa)留在键盘缓冲区。
所多执行一次
scanf(\"%c\",&op);
就OK了。


请问高手,那为什么用%s的时候没有这问题呢,虽然%s是字符串,但也应该从键盘缓冲区读,那也应该从换行符开始呀,它为什么不呢? [/quote]
你什么时候跑这里来了?竟然不理我???
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
8楼#
发布于:2002-05-28 18:39
读一个字符为什么不用getch() ?
magicx
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2014-08-18
  • 粉丝1
  • 关注0
  • 积分-14分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-05-28 18:43
//////////////////////
因为执行scanf(\"%f\",&num2);时还有一个字符(\\xa)留在键盘缓冲区。
所多执行一次
scanf(\"%c\",&op);
就OK了。
//////////////////////
那执行scanf(\"%f\",&num1);后是否也在缓冲区中留有一个回车,

给num2???

在scanf(\"%f\",&num2)时如何处理的??


小弟不才,望指点啊! :)
[color=red]大头鬼! :P[/color]
Deer
驱动大牛
驱动大牛
  • 注册日期2002-04-30
  • 最后登录2008-05-06
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-05-29 08:44
执行scanf(\"%f\",&num1);后同样留有一个换行符给num2。但是\"%f\",\"%d\"等等,是用空格或者回车作为分隔符,它会自动忽略掉前面留下的分隔符。\"%s\"用回车作为分隔符,它当然忽略掉前面的换行符啦。\"%c\"接收任意一个字符,换行符当然照收不误啦。

例如:
你可以这样输入num1和num2:
num1=1.1 2.2
上面一行就可以同时输入num1和num2了。


xuanyuan14
驱动中牛
驱动中牛
  • 注册日期2002-03-07
  • 最后登录2003-01-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-05-29 08:58
收到,多谢!
好好学习,天天时尚!
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-05-29 09:15
收到,多谢!

不客气
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
Deer
驱动大牛
驱动大牛
  • 注册日期2002-04-30
  • 最后登录2008-05-06
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-05-29 09:18
收到谁的呀?花猫别跟人抢。
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-05-29 09:27
收到谁的呀?花猫别跟人抢。

灌水而已 :D
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
Deer
驱动大牛
驱动大牛
  • 注册日期2002-04-30
  • 最后登录2008-05-06
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-05-29 09:31
 :D :D :D
xuanyuan14
驱动中牛
驱动中牛
  • 注册日期2002-03-07
  • 最后登录2003-01-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2002-05-29 11:00
收到谁的呀?花猫别跟人抢。


收到你的指导,多谢
这次说的够明白了吧:)
好好学习,天天时尚!
Deer
驱动大牛
驱动大牛
  • 注册日期2002-04-30
  • 最后登录2008-05-06
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2002-05-29 11:12
呵呵,有没有分呀?
heshen
驱动老牛
驱动老牛
  • 注册日期2002-04-19
  • 最后登录2014-01-26
  • 粉丝0
  • 关注0
  • 积分45分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2002-05-29 11:16
花猫又调皮了!
不要啊!
Deer
驱动大牛
驱动大牛
  • 注册日期2002-04-30
  • 最后登录2008-05-06
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2002-05-29 11:18
楼上兄弟,请问怎样才能升到中级?
游客

返回顶部