1.scanf的输入格式,空格、TAB和回车符都是无关紧要,所以按Enter键并不意味着输入结束。
告诉程序输入结束的方式:
在windows下,输入完毕后先按Enter键,再按Ctrl+Z键,最后再按Enter键。
在linux下,输入完毕后按Ctrl+D键
2.gcc 编译选项
-Wall指出警告
-ansi 判断是否和ANSI冲突
-pedantic 比ansi更加严格
-lm 链接数学库, C++编译器会自动链接
-DDEBUG 编译时定义符号DEBUG,可以换成其它,如-DLOCAL将定义符号LOCAL
3.两种使用文件输入输出的方法:重定向和fopen:
重定向示例:
freopen("data.in","r",stdin); freopen("data.out","w",stdout);
fopen示例:
#include<stdio.h> FILE *fin, *fout; fin = fopen("data.in", "rb"); fout = fopen("data.out", "wb"); fscanf(fin, "%d", &x); fprintf(fout, "%d", x); fclose(fin); fclose(fout);
4.使用printf和scanf输入输出long long在linux中gcc很统一的用%lld;在windows中,MinGW的gcc和VC6都需要用%I64d,但VS2008却是用%lld
5.可以使用#define A B程序中的A全部替换成B
6.比较大的数组应尽量声明在main函数外
7.使用fgetc(fin)可以从打开的文件fin中读取一个字符。一般情况下应当检查它不是EOF后再转换成char值。
从标准输入输出取一个字符用getchar,相当于fgetc(stdin);
8.fgets(buf, MAXN, fin)将读取完整的一行放在字符数组buf中,应当保证buf足够存放下文件的一行内容。除了在文件结束前没有遇到'\n'这种特殊情况外,buf总是以‘\n’结尾。当一个字符都没有读到时,fgets返回NULL。
fgets相比gets更安全,有MAXN限制。
getline: istream& getline(istream &is, string &str, char delim)
istream& getline(istream &is, string &str)这种情况delim为换行
getline会读取delim并丢弃。
例如getline(cin, name,'\n');
istream::getline :istream& getline(char *s, streamsize n) 这种情况delim为换行
istream& getline(char *s, streamsize n, char delim)
例如cin.getline(s,100,'\n');
9.头文件ctype.h中定义的isalpha,isdigit,isprint等工具可以用来判断字符的属性,而toupper、tolower等工具可以用来转换大小写。
10.string.c_str()返回的内容是只读的。
11.使用assert.h中的assert宏来限制非法函数调用
assert(x>0);
当x≤0时代码将异常终止。
12.gdb用bt(backtrace)命令打印所有栈帧信息,up命令选择上一个栈帧。