前言
这一章将要讲读取循环,主要是用户交互等,还有就是C++中简单的文件输入输出。基于课本《C++ Primer Plus 6th》第五章Loops and Relational Expressions(循环和关系表达式)和第六章Branching Statements and Logical Operators(分支语句和逻辑运算符)中C++与C不同的部分,相同的部分就跳过了。
这两章的相关内容在C语言都讲得非常详尽了,C++中的循环大部分内容都与C的一致,下面就来介绍些不一样的。
Initi part of For
C++ allows declaration in the initi part of for.
它的意思就是C++允许在for循环里定义变量,其作用域仅为当前for循环。我们来看一个例子:
int i;for(i=1;i<=10;i++)//C语言形式{...}for(int j=1;j<=10;j++)//C++形式,j仅存在于{}中{...}Size of String
我们知道,C++中定义了一个string类在
#include<string>string s;s.size();//C++ string求长度strlen(s);//等同于这一句同时,string类还可以进行++ —运算。
clock()
这个函数是在C库<time.h>里的,于是在C++里
clock()函数的返回值返回自程序启动起,处理器时钟所使用的时间。如果失败,则返回 -1 值。
一般我们可以用clock()函数来进行程序延时反应,例如:
#include <ctime>// ...clock_t start = clock( );clock_t delay = 500 * CLOCKS_PER_SEC;while (clock() - start < delay){...;}交互式字符输入
我们在写一些交互式程序的时候需要判断用户的输入是否正确,不正确需要用户重新输入。我们一般有这些方法来检测:
cin.get(ch); while (cin.fail( ) == false) // (1) { ... }while (!cin.fail( )) // (2)while (cin) // (3)while (cin.get(ch)) // (4)- 在第三种方法里,如果输入的最后一个字符正确,则返回true,否则返回false。
- 第四种比前面的方法更加紧凑清晰,返回的是一个cin,然后自动转换为bool型。
保持窗口打开
我们的程序在某些系统中会一闪而过,什么都没看见就关闭了,我们可以用下面的方法保持它们打开:
cin.get();//(1)C++方法system("pause");//(2)冻结屏幕文件输入输出
我们知道在C语言中,我们可以使用fopen,fclose来操作文件,而在C++中,这些同样适用。
#include <stdlib.h>//C语言用法FILE *f; ;f = fopen("fish.txt', "w");fputs("Hello\n", f);fclose(f);当然C++还有它特有的方法:
#include <fstream>//C++用法//...ofstream fout;fout.open("fish.txt");fout << "Hello" << endl;fout.close();我们需要添加头文件ofstream fout;
我们可以通过对象.open()关联要写入的文件,例如:fout.open("fish.txt");
如果我们要同时读入一个文件,写入一个文件,我们再用一个对象,例如:ofstream fin;
然后读入我们都可以用 fin<<,同理输出我们都可用 fout>>
打开完了后,我们也许需要判断文件是否打开成功。我们可以用成员函数.is_open()或.good()来判断。
打开失败的话也许我们需要结束程序,我们可以用exit()函数,它一般的参数值是 EXIT_FAILURE。即我们可以写:exit(EXIT_FAILURE);来终止程序。
当然除了这一种方法外,我们还可以用更为广泛使用的freopen,它是C库FILE * freopen ( const char * filename, const char * mode, FILE * stream );
它把一个新的文件名 filename 与给定的打开的流 stream 关联,同时关闭流中的旧文件。
它的参数有:
- filename — 这是 C 字符串,包含了要打开的文件名称。
- mode — 这是 C 字符串,包含了文件访问模式,模式如下:
| 模式 | 描述 |
|---|---|
| ”r” | 打开一个用于读取的文件。该文件必须存在。 |
| “w” | 创建一个用于写入的空文件。如果文件名称与已存在的文件相同,则会删除已有文件的内容,文件被视为一个新的空文件。 |
| “a” | 追加到一个文件。写操作向文件末尾追加数据。如果文件不存在,则创建文件。 |
| “r+“ | 打开一个用于更新的文件,可读取也可写入。该文件必须存在。 |
| “w+“ | 创建一个用于读写的空文件。 |
| “a+“ | 打开一个用于读取和追加的文件。 |
- stream — 这是指向 FILE 对象的指针,该 FILE 对象标识了要被重新打开的流。
如果文件成功打开,则函数返回一个指针,指向用于标识流的对象。否则,返回空指针。
例如:
#include<cstdio>int main(){ freopen("01.in","r",stdin);//读入 freopen("01.out","w",stdout);//写入 return 0;}后记
这两章都比较简单,新东西也挺少,主要就是那个交互式和文件输入输出有点区别。