今天做了一道水题,POJ-1004,水题一个,12个double类型的数求平均数

但是,

 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 int main() {
 5     double n;
 6     while (cin>>n) {
 7         int i=0;
 8         double total = n;
 9         while (i++<11) {
10             cin>>n;
11             total += n;
12         }
13         printf("$%.2lf\n", total/12);
14     }
15     return 0;
16 }

这个看起来没毛病的代码,竟然WA了,

又WA两次之后,这不是代码的事,分别用GCC,G++,C++提交,到C++的时候,A了!!!

总结总结,避免再犯

------------------------------------------------------------------------------------------------------------------------

放在最先:G++和GCC分别是C++和C的编译器,C++和C是语言。

但POJ上的则表示你提交代码运行所需的编译器,C和C++对应的编译器是VC++ 2008里面的C和C++编译器,而GCC和G++则对应相应的编译器。

那我上面既用了printf又用了cin怎么提交?

看到一篇博客叙述:G++和C++选项下的代码是没有差异的,但在库上面,两者有一定差距,比如G++默认可以cin一个string变量,而选择C++时则需要#include<string>,如果用C++编写代码,提交时最好选择G++作为编译器。

不好意思,我没用string类, 但是G++提交WA!!!

说明区别不止这一点。

------------------------------------------------------------------------------------------------------------------------

为什么G++提交WA了?

好吧回到现实中来。我昨天在做poj 3122这道题的时候,再一次的遇到了G++WA;C++AC的尴尬局面。

为什么呢?其实这个也算是编译器优化的一部分,那就是精度缺省。

众所周知,long long类型,作为一个在C/C++11才被确认为基本数据类型的一个数据类型,在不同的环

境下,他的类型标识符是不同的。也就是我们津津乐道的%lld 和 %I64d了。同样,double类型也是一

个有趣的类型。double类型其实准确地说是双精度型,他的内存长度一般是比float类型(单精度型)

的多了一倍,有的时候很早的标准里是把double称为long float的。所以说就有了为什么float类型

用%f,double用%lf。但是由于现在不是以前的那种一个内存条就几兆,多开一个double就会超内存的

年代了,所以double还有float在gcc中被自动优化。

在用scanf读数据时,为了与float区分,使用%lf。

在用printf写数据时,由于实质上,double和float是同一个类型,只不过内存占用有差异而已,他们

的标识符都是%f,注意,这个和标准C不同,这里的都是%f。

当然对于另外一个特殊的类型long double虽然不常用,但是编译器依旧在支持,这里有个插曲,理论

上long double应该是两倍的double(类似long long和int的关系,因为long和int其实是一个东西)

。但是实际上,long double很奇怪的是一个10字节的怪物,他有两个空余字节,是怎么改动都不会发

生变化的。输入输出的标识符都是%Lf,大写的L。

但是这里又有问题了,为什么我在本地用%f会WA,在OJ上用%f会AC?

因为我们本机如果使用的是Windows下的Code::Blocks这款IDE的话,编译器也就是MinGW这个东西。事

实上,为了尽量保持gcc的跨平台性,MinGW在某些地方是直接用了MSVC的东西的,而对我们影响最大的

就是这个标识符的问题。简单的说,如果你是要在本机测试,那么最好,请使用标准C的那个标识符系

统;如果你要提交代码,那么请改成gcc的那一套标识符系统。

再有就是编译器版本的问题,现在的MinGW版本已经到了4.8,但是POJ上仍然使4.4,所以低版本的编译

器同样会有一些不寻常的问题。

当然还有更简单的方法,就是直接用输入输出流在控制输入输出,这样更省事,而且跨平台性能更好,

不会出现这种因为标识符而出错的情况。

列个表格出来就是这个样子的:

列个表格出来就是这个样子的:

double f; POJ G++提交 POJ C++提交 本机测试(MinGW GCC 4.8) 最安全的方法
输入 scanf(“%lf”, &f); scanf(“%lf”, &f); scanf(“%lf”, &f); cin >> f;
输出 printf(“%f“, f); printf(“%lf”, f); printf(“%lf“, f); cout << f;

------------------------------------------------------------------------------------------------------------------------

原来还有精度的问题,那么总结:

1.用string的时候,c++需要包含头文件:#include <string>,G++不需要

2.精度问题

3.使用GCC/G++的提醒:

对于64位整数, long long int 和 __int64 都是支持并且等价的.但是在读和写的时候只支持scanf("%I64d", ...)和printf("%I64d", ...).

不支持"%lld"是因为MinGW下的GCC和G++使用的msvcrt.dll动态链接库并不支持C99标准.
根据ISO C++标准,在G++下,main函数的返回值必须是int,否则将会导致Compile Error(编译错误)的判答

4.G++/GCC使用scanf、printf时注意引用<stdio.h>/<cstdio>,只引用<iostream>不识别

转载于:https://www.cnblogs.com/evidd/p/8989538.html

ACM提交,C++,G++,C,GCC的区别相关推荐

  1. Linux中g++与gcc的区别

    转自:https://blog.csdn.net/bit_clearoff/article/details/53965514 Windows中我们常用vs来编译编写好的C和C++代码:vs把编辑器,编 ...

  2. [转]G++与GCC的区别

    转自http://www.52pojie.cn/thread-58109-1-1.html 误区一:gcc只能编译c代码,g++只能编译c++代码 两者都可以,但是请注意: 1.后缀为.c的,gcc把 ...

  3. g++和gcc的区别

    编译阶段是相同的,链接阶段g++默认链接c++库,gcc没有. 所以一般情况下用gcc编译c文件,用g++编译cpp文件. 但是也可以用gcc编译cpp文件,但后面需要加一个选项-lstdc++,作用 ...

  4. 不同的编译器:GCC G++ C C++的区别

    gcc 是c的编译器,g++是c++的编译器.cc一般是一个符号连接,指向gcc.CC一般是makefile里面的一个名字,具体是什么根据实际情况决定. gcc和g++都是GNU(组织)的一个编译器. ...

  5. GCC G++ C C++的区别

    gcc 是c的编译器,g++是c++的编译器.cc一般是一个符号连接,指向gcc.  CC一般是makefile里面的一个名字,具体是什么根据实际情况决定.  gcc和g++都是GNU(组织)的一个编 ...

  6. cc、gcc、g++、CC的区别概括

    gcc是C编译器:g++是C++编译器:linux下cc一般是一个符号连接,指向gcc:gcc和g++都是GUN(组织)的编译器.而CC则一般是makefile里面的一个名字,即宏定义,嘿,因为Lin ...

  7. G++与C++的区别

    一.OJ提交题目中的语言选项里G++与C++的区别 转自http://www.th7.cn/Program/cp/201405/199001.shtml 首先更正一个概念,C++是一门计算机编程语言, ...

  8. OJ、ACM提交常见错误类型

    OJ.ACM提交常见错误类型 一.Presentation Error(输出格式错误) 主要换行或者空格使用错误造成的 , 出现Presentation Error说明思路没问题,很多时候就是和后台样 ...

  9. arm 各种 gcc 编译器区别

    做嵌入式开发在以前经常需要下载交叉编译器,主要是因为那个时候的产品绝大多数位 arm架构的,而市面上基本上的 PC/服务器基本上 X86.即便现在 arm架构的笔记本和服务器慢慢推向市场,原由的那套嵌 ...

最新文章

  1. 汉字笔画数据_统计学原理 数据的预处理
  2. 员工培训:如何制定以数据为依据的业务决策
  3. ecside使用笔记(1)
  4. 云从科技IPO上市,AI四小龙同路不同归
  5. 最亲密接触DhtmlJScript开发细节
  6. ssl2648-线段树练习5【线段树】
  7. CSS深入理解vertical-align和line-height的基友关系
  8. python pyquery安装_win7下python安装pyquery
  9. 为赚快钱,IT 程序员沦为新型电诈案“制刀者”
  10. 收藏 | 绝不能错过的24个顶级Python库
  11. 程序员加油站 -- 懂电脑更要懂人脑!继“书呆子”后又一呆子现世!
  12. php日期函数实际应用,日期函数如何在PHP中使用
  13. H3C无线控制器AP license共享配置
  14. redis 优惠券秒杀逐步优化
  15. 国内一些黑客高手的联系方法
  16. DirectUI学习笔记(1)
  17. JS原生制作手风琴特效
  18. Android,JCVideoPlayerStandard,节操,视频播放
  19. 2、PVID(本征VLAN)实验配置步骤
  20. 用Appium进行iOS自动化测试

热门文章

  1. [WinAPI] API 11 [创建目录]
  2. Linux正变得无处不在;应用大盘点
  3. mysql主从同步主服务器热切换
  4. 因特网的协议集称为TCP/IP协议集
  5. 突发奇想写的一篇小科幻(如果可以叫做科幻的话)
  6. vue中使用MD5加密
  7. [转]FPGA的GTP信号PCB布线要点
  8. java字符串,包,数组及空心正方形,菱形的实例
  9. hdoj--2534--Score(gcd)
  10. mysql 的not null 与 null的区别(转,恍然大悟)