首页
社区
课程
招聘
菜鸟求助
发表于: 2009-12-29 22:15 3654

菜鸟求助

2009-12-29 22:15
3654
#include "stdafx.h"
#include <stdio.h>
#include <string.h>

int _tmain(int argc, _TCHAR* argv[])
{
  char ch ;
  float weight, volume ;
  int size, letters ;
  char name[40] ;

  while(1)
  {

   printf("Hi! What's your first name ?\n") ;
     scanf("%s", &name) ;
   printf("%s, What's your weigth in pounds? \n", name) ;
     scanf("%f", &weight) ;

  printf("是否退出程序") ;
     scanf("%c", &ch) ;
       if (ch == 'Y')
           break ;
   }
return 0;
}

这是运行结果, 为什么"Hi! What's your first name ?”会出现在"是否退出程序"的后面呢? 难道不应该退出的吗?..
修改代码  //scanf("%f", &weight) ;将这句注释掉.
可以正常运行, 这是为什么呢?
还有一个小问题scanf("%s", &name) ; 为什么这里的&name 改为name也可以运行呀? 本人比较笨, 希望哪位大虾可以出来指点指点…

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 173
活跃值: (132)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
2
没人?。。。 自己顶下....
2009-12-30 15:56
0
雪    币: 564
活跃值: (42)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
3
&name 与name 指向的是同一地址。。。。
2009-12-30 16:28
0
雪    币: 564
活跃值: (42)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
4
程序中 scanf("%f", &weight) ;接着就是 scanf("%c", &ch) ;
因为当输入完weight的时候,,紧接着我们就输入回车,,系统将回车的值赋给ch变量;所以接着就输出Hi! What's your first name ,,可以将其改为scanf("%s", &ch) ;或        getchar(); ch=getchar();
2009-12-30 17:34
0
雪    币: 173
活跃值: (132)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
5
的确, 改成那样就可以了, 不过为什么我按下回车以后,系统就将回车的值赋给ch变量了呢?  为啥子第一个这里   scanf("%s", &name) ; 按下回车后 系统不将回车的值赋给weight呢? 这是因为scanf函数的原因还是"%..."这里的原因呢?
然后顺便再问下这个getchar()函数, 它一次只接受一个字符输入, 但是当我们输入三个字符的时候, 它却只接收了第一个字符和第三个字符... 有时候又显得没有规律... 劳烦您再解释下, 谢了, 呵呵
2009-12-30 20:06
0
雪    币: 564
活跃值: (42)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
6
其实在用scanf函数在键盘上接受字符型数据,要用fflush(stdin)清除上一次存储的数据,不然字符型数据就不会正确的存储. 所以在scanf("%c", &ch) 前面加fflush(stdin)就能正确了,,而%c与%s的不同可能在于对数字与字符的处理上,,,至于你说的其他问题不明白的,,建议自己看下书。。。。。
2009-12-30 21:42
0
雪    币: 173
活跃值: (132)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
7
恩, 好的, O(∩_∩)O谢谢
2009-12-30 23:40
0
游客
登录 | 注册 方可回帖
返回
//