新人求解

鹏割 2014-07-06 03:48:35
[code=c#include <iostream>
using namespace std;
void main()
{
long long world,America;
long double A;
cout<<" Enter the world's population:";
cin>>world;

cout<<" Enter the population of the US:";
cin>>America;
A=(America/world)*100;
cout<<" The population of the US is "<<A<<"% of the world population.";
system("pause");

}
][/code]

上面是代码,为什么我输入的是6898758899,310783781,输出的是The population of US is 0% of the world population,为什么是0%, 还有一个问题就是为什么我没有换行。而输出的语句却自动换行了
...全文
232 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
乌镇程序员 2014-07-07
  • 打赏
  • 举报
回复
引用 10 楼 nizhannizhan 的回复:
[quote=引用 9 楼 T5500 的回复:] [quote=引用 7 楼 nizhannizhan 的回复:] [quote=引用 1 楼 T5500 的回复:] 两个整数相除的结果还是整数,小数部分直接去尾,即America / world的结果是0,这两个变量应声明为long double型 换行需要输出换行符"\n"或endl
我把A定义的是long double 类型,America/world 是整数,得出的整型结果不会自动转换为doube型吗[/quote] 会啊,但America / world结果是0.045...,小数部分自动丢弃,表达式计算结果就是0,最后自动转换成浮点型数值0赋給A[/quote] 可是我后面乘了100啊[/quote] 0 * 100还是0!只要记住“整数想除结果还是整数”这句话就够了,没那么难以理解吧。
幻夢之葉 2014-07-07
  • 打赏
  • 举报
回复
debug 调试看America,world的值
鹏割 2014-07-07
  • 打赏
  • 举报
回复
引用 9 楼 T5500 的回复:
[quote=引用 7 楼 nizhannizhan 的回复:] [quote=引用 1 楼 T5500 的回复:] 两个整数相除的结果还是整数,小数部分直接去尾,即America / world的结果是0,这两个变量应声明为long double型 换行需要输出换行符"\n"或endl
我把A定义的是long double 类型,America/world 是整数,得出的整型结果不会自动转换为doube型吗[/quote] 会啊,但America / world结果是0.045...,小数部分自动丢弃,表达式计算结果就是0,最后自动转换成浮点型数值0赋給A[/quote] 可是我后面乘了100啊
乌镇程序员 2014-07-06
  • 打赏
  • 举报
回复
引用 7 楼 nizhannizhan 的回复:
[quote=引用 1 楼 T5500 的回复:] 两个整数相除的结果还是整数,小数部分直接去尾,即America / world的结果是0,这两个变量应声明为long double型 换行需要输出换行符"\n"或endl
我把A定义的是long double 类型,America/world 是整数,得出的整型结果不会自动转换为doube型吗[/quote] 会啊,但America / world结果是0.045...,小数部分自动丢弃,表达式计算结果就是0,最后自动转换成浮点型数值0赋給A
mujiok2003 2014-07-06
  • 打赏
  • 举报
回复
引用
上面是代码,为什么我输入的是6898758899,310783781
输入的时候,用空格分隔, 不要使用,
鹏割 2014-07-06
  • 打赏
  • 举报
回复
引用 1 楼 T5500 的回复:
两个整数相除的结果还是整数,小数部分直接去尾,即America / world的结果是0,这两个变量应声明为long double型 换行需要输出换行符"\n"或endl
我把A定义的是long double 类型,America/world 是整数,得出的整型结果不会自动转换为doube型吗
乌镇程序员 2014-07-06
  • 打赏
  • 举报
回复
恩,测试结果当然是正常输出,我说的“按理”是因为书本开篇“初识输入书中”一节P6页介绍endl操纵符有这么一句:
引用
缓冲刷新操作可以保证到目前为止程序所产生的所有输出都真正写入输出流中,而不是仅停留在内存中等待写入流。
The_Third_Wave 2014-07-06
  • 打赏
  • 举报
回复
引用 2 楼 T5500 的回复:
关于换行的问题我看错了,我比你还要新手,刚开始学C++,正在看C++ Primer第5版,还没学到专门介绍IO库的章节,对这个问题也是云里雾里,比如在你的代码中前两条cout语句都没有输出endl操作符刷新输出缓冲区,按理说连这两句输入提示都不应该显示出来啊
按理还需要实际测试啊!
Pandorym 2014-07-06
  • 打赏
  • 举报
回复
原因在于 A=(America/world)*100; 因为America和world都是整型,所以(America/world)按照整型除法是不保留小数的。 你可以将先将America或world转为double再相除。
A=((double)America/world)*100;  //第一种
A=(America/(double)world)*100;  //第二种
A=((double)America/(double)world)*100;  // 第三种
至于#2的问题,endl是换行并立即清空输出缓冲区。但执行下一条语句前,也会清空输出缓存区。
sinat_17304749 2014-07-06
  • 打赏
  • 举报
回复
America要改成浮点型
乌镇程序员 2014-07-06
  • 打赏
  • 举报
回复
关于换行的问题我看错了,我比你还要新手,刚开始学C++,正在看C++ Primer第5版,还没学到专门介绍IO库的章节,对这个问题也是云里雾里,比如在你的代码中前两条cout语句都没有输出endl操作符刷新输出缓冲区,按理说连这两句输入提示都不应该显示出来啊
乌镇程序员 2014-07-06
  • 打赏
  • 举报
回复
两个整数相除的结果还是整数,小数部分直接去尾,即America / world的结果是0,这两个变量应声明为long double型 换行需要输出换行符"\n"或endl

65,183

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧