前言
这一章将要讲读取循环,主要是用户交互等,还有就是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类在<string>里,string类的使用比char []的字符串表示更加方便,在求size的时候,也有自己独特的用法,例如:
#include<string>
string s;
s.size();//C++ string求长度
strlen(s);//等同于这一句
同时,string类还可以进行++ --运算。
clock()
这个函数是在C库<time.h>里的,于是在C++里<ctime>也同样适用。clock_t clock(void) 返回程序执行起(一般为程序的开头),处理器时钟所使用的时间。为了获取 CPU 所使用的秒数,需要除以CLOCKS_PER_SEC。
clock()函数的返回值返回自程序启动起,处理器时钟所使用的时间。如果失败,则返回 -1 值。
一般我们可以用clock()函数来进行程序延时反应,例如:
#include
// ...
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();
我们需要添加头文件<fstream>,虽然头文件<iostream>提供了一个预先定义好的cout和ostream对象, 但必须声明自己的ofstream对象,为其命名,并将其与文件关联起来。例如:ofstream fout;
我们可以通过对象.open()
关联要写入的文件,例如:fout.open("fish.txt");
如果我们要同时读入一个文件,写入一个文件,我们再用一个对象,例如:ofstream fin;
然后读入我们都可以用fin<<,同理输出我们都可用fout>>
打开完了后,我们也许需要判断文件是否打开成功。我们可以用成员函数.is_open()
或.good()
来判断。
打开失败的话也许我们需要结束程序,我们可以用<cstdlib>库里的exit()
函数,它一般的参数值是EXIT_FAILURE。即我们可以写:exit(EXIT_FAILURE);
来终止程序。
当然除了这一种方法外,我们还可以用更为广泛使用的freopen,它是C库<cstdio>里的函数,它的声明是: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;
}
后记
这两章都比较简单,新东西也挺少,主要就是那个交互式和文件输入输出有点区别。
Comments NOTHING