字符输入!
使用scanf必须判断EOF:while (scanf("%d %d",&a, &b)!= EOF)。因为系统将输入保存到一个文件中,因此需要判断文件的末尾而结束while循环。白痴的我在使用gets时,同样做了这样的判断while(EOF!= gets(name)),导致死循环输入,输出超限!gets的返回值是没有EOF的,输入成功返回字符串首地址,输入失败或遇到错误返回NULL,采用如下即可:while(gets(name))。
编译器的不同!
首先,C与C++编译器的一些区别:C++编译器支持bool型变量,支持函数的参数引用传递,而C编译器不支持bool型变量,支持引用,但是不支持函数的参数引用传递!
其次,VC编译器和gcc编译器的一些区别:VC编译器支持__int64的64位定义,不支持long long的64位定义。gcc支持long long的64位定义。但是__int64不是ANSI标准定义,只能在VC使用(在新手必读里有部分描述)。
另外,C编译器支持的整型有八进制、十进制、十六进制,不支持二进制赋值(如:a = 0xfff; a = 0172; a = 123;不存在a =10011b或a = b101)。
最后,OJ系统使用的编译器是suse系统下的gcc编译器,编译参数如下:gccMain.c -o Main -02 -Wall -lm --static -std=c99 -DONLINE_JUDGE ,最好将程序也在suse下进行编译调试。
WIN32屏蔽不安全函数告警
本节来自:http://blog.csdn.net/xuleilx/article/details/7281499
Warning 1 warningC4996: 'fopen': This function or variable may be unsafe. Consider using fopen_sinstead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online helpfor details.
在编程过程中难免会用到一些过时,或者曾经不安全的函数,如上,这是编译器会出现warning提示用某某新函数,如果不想使用新的函数可以使用一下方法:
1. 使用VS提供的 编译器选择性提供warning功能 link: http://msdn.microsoft.com/en-
us/library/2c8f766e.aspx 例:上面的错误使用 #pragma warning( disable :4996) 即可消除。
2. 使用提示中的_CRT_SECURE_NO_WARNINGS,以下是使用方法:
a. Projectproperties->ConfigurationProperties->C/C++->Preprocessor->Preprocessor
Definitions
b. 点击按钮 (...)
c. 输入:_CRT_SECURE_NO_WARNINGS。 注:使用 "\n" 相隔
3.#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>