天天看点

C++ 琐碎

注意用fstream创建文件时,不能指定ios::in 参数,否则当文件不存在时不会自动创建

  char *fileName = "C://input.txt" ; 

fstream fs(fileName, ios::in | ios::out, ios::trunc);  

当fileName对应的文件不存在时,不会自动创建

但是如果写成

  char *fileName = "C://input.txt" ; 

fstream fs(fileName, ios::out, ios::trunc) ;  

如果文件不存在那么就会自动创建一个

定位到了文件之后重新定位到屏幕输出 freopen("CON", "r", stdin); 

freopen("CON", "r", stdout);   //CON  是控制台的另外一个设备文件名

cout带缓冲输出,printf不带缓冲输出??

输入字符串时, cin.get不会忽略有效字符前的字符,同时在输入结束时会将\n留在输入流中 类似于scanf?

scanf之后再genline(cin, str)的话, str也是空字符串。

能将整数转换为字符串而且与ANSI标准兼容的方法是使用sprintf()函数 int num = 100; char str[25]; sprintf(str, "%d", num);

1.注意 如果格式字符串中存在空格 scanf则表示可以跳过一切空白字符 包括空格 换行符 制表符等

2.在C语言中,接受输入单个字符的函数如scanf、getchar()等都有一个毛病, 就是程序接受完用户输入的字符后并没有清空键盘输入缓冲区(或者说标准输入流),,因此当用户输完字符和回车后,回车字符还留在标准输入流中,而gets函数又恰好从缓冲区的当前字符开始接收输入,这样,它接收的到第一个字符就是上次输入遗留下来的回车符号,于是程序又会把它作为结束输入的标志,不再接受用户的键盘输入。     而C++的输入流就改正了这个毛病,接受完后自动清空输入流。 

语句fflush(stdin);的作用就是清空当前的标准输入流(即键盘缓冲区。)

3.getline(ss, str, ' '); getline分隔字符串

4.如果在不知道内存具体需求的时候,使用deque绝对是比vector好的

5.c++清空输入缓冲区 cin.clear() cin.sync()

6.一个无向图存在欧拉回路,当且仅当该图所有顶点度数都是偶数

7.程序员只能为类类型或枚举类型的操作数定义重载操作符

8.不能简单的把指针理解为地址,而应该是指向一块内存区域的起始地址。指向区域的大小视指针变量的类型而定。

extern  void  func() {     printf( "111\n" );      int  a[11];     printf( "a=%d\n" , a);     printf( "&a=%d\n" , &a);     printf( "a+1=%d\n" , a+1);     printf( "&a+1=%d\n" , &a+1);      //&a指向的是int[11]类型的指针变量,区域是int*11     // int a[11] 变形为 int* (&a)[11] } 结果:

111

a=4455100

&a=4455100

a+1=4455104

&a+1=4455144

请按任意键继续. . .

9.return与exit()的区别

调用exit()函数会 结束当前进程,同时 删除子进程所占用的内存空间,把返回信息传给父进程。 return仅表示调用堆栈的返回,其作用是返回函数值,并且推出当前执行的函数体,返回到函数的调用处。 在main()函数中执行return n和exit(n)是等价的。

10. 指针数组与数组指针

int *p[8], 指针数组,p是数组元素为指针的数组, 本质为数组,p先于[]结合,说明p是一个数组,然后再与*结合说明数组p的元素是指向整型数据的指针。

int (*p)[8],p先与*组合,形成一个指针,该指针指向的是有8个整型元素数组,p即为指向数组首元素地址的指针,其 本质为指针

c++

继续阅读