引自与曾今的导师Dr. Collete Heig的一次例会交谈,虽然您已离开原本的岗位,但期望您一切安好:
我们选择research作为毕生的事业及选择作为一名工程师的原因,不正是因为喜欢这种单纯而充满激情的生活嘛。
4. C++中的cin.ignore ()和cin.getline ()函数:
4.1 cin.ignore ()函数:
4.1.1 cin.ignore (a, ch)方法是从输入流(cin)中提取字符,提取的字符被忽略(ignore),不被使用。每抛弃一个字符,它都要计数和比较字符:如果计数值达到a或者被抛弃的字符是ch,则cin.ignore ()函数执行终止;否则它继续等待。
4.1.2 它的一个常用功能就是用来清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。
4.1.3 例如:cin.ignore (1024, ‘\n’); 通常把第一个参数设置得足够大,这样实际上总是只有第二个参数'\n'起作用,所以这一句就是把回车(包括回车)之前的所以字符从输入缓冲(流)中清除出去。
4.1.4 如果cin.ignore()不给参数,则默认参数为cin.ignore(1,EOF),即把EOF前的1个字符清掉,没有遇到EOF就清掉一个字符然后结束,会导致不正确的结果,因为EOF是文件结束标识。
4.2 cin.getline ()函数:
4.2.1 此函数会一次读取多个字符(包括空白字符)。它以指定的地址为存放第一个读取的字符的位置,依次向后存放读取的字符,直到读满N-1个,或者遇到指定的结束符为止。若不指定结束符,则默认结束符为'\n'。
4.2.2 语法为:cin.getline (字符指针(char*),字符个数N(int),结束符(char));
5. C++中的cin.get() 和 cin.peek()函数:
5.1 cin.get()函数:
1)接收一个字符ch=cin.get()或cin.get(char ch),二者等价。
2)接收一定长度的字符串cin.get(字符数组名,接收长度,结束符),结束符为可选参数,默认为Enter,可以接受Space 、Tab,对于结束符的处理要注意,结束符并不会丢掉。
3)cin.get( ),注意此时没有参数可用于舍弃,输入流中的不需要的字符或者舍弃回车,弥补cin.get(字符数组名,字符数目,结束符)的不足。
5.2 cin.peek()函数:
5.2.1 cin.peek()函数其返回值是一个char型的字符,返回值是指针指向的当前字符, 但是只是观测,指针任停留在当前位置,并不后移.如果要访问的字符是文件结束符,则函数值是EOF(-1)。
5.2.2 功能:从输入流中读取一个字符,但是该字符并未从输入流中删除,如果把输入流比作栈类,那么这里的peek函数就相当于栈的成员函数top,而cin.get()相当于栈的成员函数pop()。
6. C++中的cin.gcount()和cin.read()函数:
6.1 cin.gcount():计数。
6.2 cin.read():读取指定长度的内容。
7. C++中的cout.precision()和cout.width()函数:
7.1 cout.precision():cout.precision(val)就是在输出的时候设定输出值以新的浮点数精度值显示,即小数点后保留val位。
7.2 cout.width():规定输出的长度。
8. C++中输入和输出相关函数小结:
函数基本形式 |
说明 |
cin |
|
cout |
要注意使用结束endl |
cin.ignore (计数量(N), 结束符(char)) |
忽略N次直到char |
cin.getline (字符指针(char*),字符个数N(int),结束符(char)) |
获取N-1个字符或到结束符 |
cin.get(字符数组名(char*),接收长度(N),结束符(char)) |
比getline少一个结束符 |
cin.peek() |
从输入流拷贝一个字符 |
cin.gcount() |
计数 |
cin.read() |
读取指定长度的内容 |
cout.precision(val) |
小数点后保留val位 |
cout.width() |
规定输出的长度 |
9. C代码分析:(对比C和CPP在实现和思想上的差异)
9.1 argc与argv[]:
9.1.1 在程序中,main函数有两个参数,整型变量argc和字符指针数组argv[]。
9.1.2 argc的含义是程序的参数数量,包含本身。
9.1.3 argv[]的每个指针指向命令行的一个字符串,所以argv[0]指向字符串”copyFile.exe”。argv[1]指向字符串sourceFile,argv[2]指向字符串destFile。
9.2 in和out是两个文件指针,它们的类型都是FILE*,分别作为I/O流对象使用。
9.3 if(arc != 3)是为了确保程序参数个数的正确性。
9.4 通过fopen()函数,以二进制可读/可写方式打开两个文件并返回两个文件指针给in和out。
9.5 为了确保文件成功打开,需要对fopen()的返回值进行检查,如果打开失败,就像标准错误流stderr发送一条消息。
9.6 getc()函数一次从输入流(stdin)读取一个字符,putc()函数把这个字符写入到输出流(stdout)。
9.7 当getc()遇到文件结束标志的时候,函数就返回EOF。EOF是一个宏,在stdio.h中定义,其值为一个负数,通常是-1。
9.8 EOF(End of File)事实上有两个含义:当文件读取错误,或者文件结束时都会返回EOF。
9.9 注意细节:getc()的返回值是int类型,所以代码中声明的ch也是int类型,不是char类型。
9.10 int fprintf(FILE *stream,const char *format,[argument]):
FILE*stream:文件指针;const char* format:输出格式;[argument]:附加参数列表。fprintf( )会根据参数format 字符串来转换并格式化数据, 然后将结果输出到参数stream 指定的文件中, 直到出现字符串结束('\0')为止。
10. C++的文件操作:
10.1 两个例子都使用了open函数来完成打开文件操作。但这不是唯一的办法,还可以采用:
※ ifstream.in ( “Text.txt” ); 和 ofstream.out ( “Text.txt” );
※ 这两者在创建 ”ifstream” 和 ”ofstream” 类对象时,将文件的名字传递给他们的构造函数。
※ 构造函数就是对象默认使用的函数(方法)。
10.2 事实上,构造函数还可以接受不止一个参数:
※ filename表示文件的名称,它是一个字符串;open_mode表示打开模式,其值用来定义以怎样的方式打开文件(跟open的参数一样)。
※ 以下给出几种常见的打开模式:
10.3 使用“|”操作符可以实现同时使用多种打开方式。