1327 字
7 分钟
【C++学习笔记】交互输入与简单文件输入输出

前言#

这一章将要讲读取循环,主要是用户交互等,还有就是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类的使用比char []的字符串表示更加方便,在求size的时候,也有自己独特的用法,例如:

#include<string>
string s;
s.size();//C++ string求长度
strlen(s);//等同于这一句

同时,string类还可以进行++ —运算。


clock()#

这个函数是在C库<time.h>里的,于是在C++里也同样适用。clock_t clock(void) 返回程序执行起(一般为程序的开头),处理器时钟所使用的时间。为了获取 CPU 所使用的秒数,需要除以CLOCKS_PER_SEC。

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();

我们需要添加头文件,虽然头文件提供了一个预先定义好的cout和ostream对象, 但必须声明自己的ofstream对象,为其命名,并将其与文件关联起来。例如: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;
}

后记#

这两章都比较简单,新东西也挺少,主要就是那个交互式和文件输入输出有点区别。

【C++学习笔记】交互输入与简单文件输入输出
https://hoyue.fun/cpp_4.html
作者
Hoyue
发布于
2022-03-05
最后更新于
2024-01-13
许可协议
CC BY-NC-SA 4.0
评论