搜档网
当前位置:搜档网 › C++文件的输入输出(讲解非常清晰)

C++文件的输入输出(讲解非常清晰)

C++文件的输入输出(讲解非常清晰)
C++文件的输入输出(讲解非常清晰)

C++中的文件输入/输出(1)

原作:Ilia Yordanov, loobian@https://www.sodocs.net/doc/168815116.html,

简介

本教程将以C++最基本的文件I/O(输出/输出)开始。此后,我将从更深入的方面,为你展示一些技巧,并分析给出一些有用的函数。

你需要对C++有一个较好的理解,否则这个教程于你而言将是陌生而毫无用处。

你的第一个程序

首先我将给出一段代码,接着再逐行进行解释。我们的第一个程序将建立一个文件,并写入一些字符:

#include

void main() // 程序从这里开始运行

{

ofstream SaveFile(“cpp-home.txt”);

SaveFile << “Hello World, from https://www.sodocs.net/doc/168815116.html, and Loobian!”;

SaveFile.close();

}

仅仅如此吗?没错!这个程序将在当前运行目录下建立一个名为

cpp-home.txt的文件,并向它写入“Hello World, from https://www.sodocs.net/doc/168815116.html, and Loobian!”。

下面给出各行的含义:

#include ——你需要包含此文件以使用C++的文件输入/输出函数。注意:一旦包含了这个文件,你不再需要(为了使用cout/cin)包含iostream.h,因为fstream.h已经自动包含了它。

在这个头文件中声明了若干个类,包括ifstream,ofstream及fstream,它们都继承自istream和ostream类。

ofstream SaveFile(“cpp-home.txt”);

1)ofstream即“output file stream(输出文件流)”。它将建立一个句柄(handle),以便我们以后能以一个文件流的形式写入文件。

2)SaveFile ——这是文件句柄的名字,当然,你还可以换用任何一个你想要的名称。

3)(“cpp-home.txt”);——打开名为cpp-home.txt的文件。如果程序运行的当前目录已经存在这样一个文件,则它将被替换掉;万一不存在,程序也会为你创建一个为文件,你不必为此而担心。

现在,让我们稍微深入一点点。首先,我要指出的是:ofstream是一个类。因此ofstream SaveFile(“cpp-home.txt”);这一语句将创建一个该类的对象;而我们在括号中所传递的参数实际上将传给构造函数:在这里我们将我们要建立的文件的名称作为实际参数传递给了该类的构造函数。当然,我们还可以传递其它的一些信息,不过我以后再对其进行讲解。

SaveFile << “Hello World, from https://www.sodocs.net/doc/168815116.html, and Loobian!”; ——“<<”看起来是不是很亲切?不错,想必你已经在cout << 中见到过。这是一个预定义好的运算符。不管怎么说,这行语句所做的,是将上面的那段文本写入文件。正如前面所提到的,SaveFile是一个文件句柄,它关联一个打开的流式文件。所以,我们只须输入句柄名,再跟着输入“<<”,然后接着写下一串用引号括起来的文本,就可以实现对文件的写入。如果我们想写入的是某个变量的值而不是带引号的文本,也只须像通常使用cout << 一样将变量传递给句柄对象,像这样:

SaveFile << variablename;

就可以了!

SaveFile.close(); ——既然我们打开了一个流文件,那么当我们用完它之后,就必须关闭它。SaveFile是ofstream类的一个对象,而该类(ofstream)有一个用于关闭文件的成员函数,即close()函数。因此,我们只要依次输入文件句柄名,点号和close(),就可以关闭该文件!

注意:一旦你关闭文件,在你重新打开它以前,就再不能对它进行访问。

以上就是一个可以写文件的最简单程序。的确很容易!不过,正如你即将在以后部分的教程中所看到的,还有更多的东西要学呢!

本文引用通告地址:https://www.sodocs.net/doc/168815116.html,/Kusk/services/trackbacks/7377.aspx

=================

C++ 中的文件输入/输出(2):读取文件

C++中的文件输入/输出(2)

原作:Ilia Yordanov, loobian@https://www.sodocs.net/doc/168815116.html,

读取文件

你已经看到了应该如何写文件。现在,当我们已经得到cpp-home.txt文件时,我们将要读取它,并且将内容打印在屏幕上。

首先,我要指出的是,有很多种方法可以读取文件。以后我会向你们介绍所有的方法(就我所知的)。此刻,我先向你展示最佳的方法(我认为的)。

正如你已经熟悉的——我将首先给出一段程序代码,然后,我会详细地对它进行解释说明:

#include

void main() //程序从这里开始

{

ifstream OpenFile("cpp-home.txt");

char ch;

while(!OpenFile.eof())

{

OpenFile.get(ch);

cout << ch;

}

OpenFile.close();

}

你想必已经了解首行的意义所在,而剩下的部分将由我为你解释。

ifstream OpenFile(“cpp-home.txt”) ——我猜它对现在的你而言多少会熟悉些!ifstream表示“input file s tream(输入文件流)”。在前一节的程序中,出现的则是ofstream,它的意义是“output file stream(输出文件流)”。前一节的程序是进行文件的写操作,这就是它用“output(输出)”来表示的原因。而本节的程序则是读取一个文件,这就是它用“input(输入)”来表示的原因。这一行剩下的代码于你而言应当是熟悉的了:OpenFile是ifstream类的一个对象,它将关联一个输入文件流;而用引号括住的内容,就是将要打开的文件的名称。

请注意:这里没有对要打开的文件是否存在进行测试!以后我将向你指出如何进行检测。

char ch;——声明一个字符数组(array of type char)。只是有一点要提醒你:这样的数组(arrays)只能存储一个ASCII字符。

while(!OpenFile.eof())——如果已经到达文件末尾,eof( )函数将返回一个非零值。因此我们所设计的这个循环将一直持续,直至我们的文件操作到达文件末尾。这样我们就可以遍历整个文件,以便对它进行读取。

OpenFile.get(ch);——OpenFile是类ifstream的一个对象。该类声明了一个名为get( )的成员函数。只要我们拥有该对象,我们自然就可以调用这个函数。get( )函数从相应的流文件中读出一个字符,并将其返回给变量。在本例中,get( )函数只带一个参数——用于存储所读取的字符的变量。所以,调用OpenFile.get(ch)后程序将会从OpenFile流中读取一个字符并存入变量ch中。

注意:如果你再次调用该函数,它将读取下一个字符,而不是原来的那一个!你过后将理解为什么会这样。

这就是我们要不断反复循环直至读操作到达文件尾的原因。每循环一次,我们将读出一个字符并将它保存在ch中。

cout << ch;——显示ch变量值,它保存了读取得到的字符。

File.close();——我们打开了一个流式文件,就需要关闭它。使用close()函数即可将它关闭,这和前一节的一样!

注意:一旦你关闭了一个文件,在你重新打开它之前,你不能再对它进行访问。

大功告成了!我希望你能明白我的解释。当你编译并运行这个程序的时候,它应当会输出:

“Hello World, from https://www.sodocs.net/doc/168815116.html, and Loobian!”

本文引用通告地址:https://www.sodocs.net/doc/168815116.html,/Kusk/services/trackbacks/7378.aspx

===============

C++ 中的文件输入/输出(3):掌握输入/输出流

C++中的文件输入/输出(3)

原作:Ilia Yordanov, loobian@https://www.sodocs.net/doc/168815116.html,

掌握输入/输出流

在这一章里,我会提及一些有用的函数。我将为你演示如何打开一个可以同时进行读、写操作的文件;此外,我还将为你介绍其它打开文件的方法,以及如何判断打开操作是否成功。因此,请接着往下读!

到目前为止,我已为你所展示的只是单一的打开文件的途径:要么为读取而打开,要么为写入而打开。但文件还可以以其它方式打开。迄今,你应当已经认识了下面的方法:

ifstream OpenFile(“c pp-home.txt”);

噢,这可不是唯一的方法!正如以前所提到的,以上的代码创建一个类ifstream的对象,并将文件的名字传递给它的构造函数。但实际上,还存在有不少的重载的构造函数,它们可以接受不止一个的参数。同时,还有一个open()函数可以做同样的事情。下面是一个以上代码的示例,但它使用了open()函数:

ifstream OpenFile;

OpenFile.open(“cpp-home.txt”);

你会问:它们之间有什么区别吗?哦,我曾做了不少测试,结论是没有区别!只不过如果你要创建一个文件句柄但不想立刻给它指定一个文件名,那么你可以使用open()函数过后进行指定。顺便再给出一个要使用open()函数的例子:如果你打开一个文件,然后关闭了它,又打算用同一个文件句柄打开另一个文件,这样一来,你将需要使用open()函数。

考虑以下的代码示例:

#include

void read(ifstream &T) //pass the file stream to the function

{

//the method to read a file, that I showed you before

char ch;

while(!T.eof())

{

T.get(ch);

cout << ch;

}

cout << endl << "--------" << endl;

}

void main()

{

ifstream T("file1.txt");

read(T);

T.close();

T.open("file2.txt");

read(T);

T.close();

}

据此,只要file1.txt和file2.txt并存储了文本内容,你将看到这些内容。

现在,该向你演示的是,文件名并不是你唯一可以向open()函数或者构造函数(其实都一样)传递的参数。下面是一个函数原型:

ifstream OpenFile(char *filename, int open_mode);

你应当知道filename表示文件的名称(一个字符串),而新出现的则是open_mode(打开模式)。open_mode的值用来定义以怎样的方式打开文件。下面是打开模式的列表:

实际上,以上的值都属于一个枚举类型的int常量。但为了让你的编程生涯不至于太痛苦,你可以像上表所见的那样使用那些名称。

下面是一个关于如何使用打开模式的例子:

#include

void main()

{

ofstream SaveFile("file1.txt", ios::ate);

SaveFile << "That's new!\n";

SaveFile.close();

}

正如你在表中所看到的:使用ios::ate将会从文件的末尾开始执行写入。如果我没有使用它,原来的文件内容将会被重新写入的内容覆盖掉。不过既然我已经使用了它,那么我只会在原文件的末尾进行添加。所以,如果file1.txt 原有的内容是这样:

Hi! This is test from https://www.sodocs.net/doc/168815116.html,!

那么执行上面的代码后,程序将会为它添上“That’s new!”,因此它看起来将变成这样:

Hi! This is test from https://www.sodocs.net/doc/168815116.html,!That’s new!

假如你打算设置不止一个的打开模式标志,只须使用OR操作符或者是| ,像这样:

ios::ate | ios::binary

我希望现在你已经明白“打开模式”是什么意思了!

现在,是时候向你展示一些真正有用的东西了!我敢打赌你现在还不知道应当怎样打开一个可以同时进行读取和写入操作的文件!下面就是实现的方法:

fst ream File(“cpp-home.txt”,ios::in | ios::out);

实际上,这只是一个声明语句。我将在下面数行之后给你一个代码示例。但此时我首先想提及一些你应当知道的内容。

上面的代码创建了一个名为“File”的流式文件的句柄。如你所知,它是fstream类的一个对象。当使用fstream时,你应当指定ios::in和ios::out 作为文件的打开模式。这样,你就可以同时对文件进行读、写,而无须创建新的文件句柄。噢,当然,你也可以只进行读或者写的操作。那样的话,相应地你应当只使用ios::in或者只使用ios::out ——要思考的问题是:如果你打算这么做,为什么你不分别用ifstream及ofstream来实现呢?

下面就先给出示例代码:

#include

void main()

{

fstream File("test.txt",ios::in | ios::out);

File << "Hi!"; //将“Hi!”写入文件

static char str[10]; //当使用static时,数组会自动被初始化

//即是被清空为零

File.seekg(ios::beg); // 回到文件首部

// 此函数将在后面解释

File >> str;

cout << str << endl;

File.close();

}

OK,这儿又有一些新东西,所以我将逐行进行解释:

fstream File(“test.txt”, ios::in | ios::out);——此行创

建一个fstream对象,执行时将会以读/写方式打开test.txt文件。这意味着你可以同时读取文件并写入数据。

File << “Hi!”;——我打赌你已经知道它的意思了。

static char str[10];——这将创建一个容量为10的字符数组。我

猜static对你而言或者有些陌生,如果这样就忽略它。这只不过会在创建数组的同时对其进行初始化。

File.seekg(ios::beg);—— OK,我要让你明白它究竟会做些什么,

因此我将以一些有点儿离题、但挺重要的内容开始我的解释。

还记得它么:

while(!OpenFile.eof())

{

OpenFile.get(ch);

cout << ch;

}

你是不是曾经很想知道那背后真正执行了什么操作?不管是或不是,我都将为你解释。这是一个while型循环,它会一直反复,直至程序的操作到达文件的尾端。但这个循环如何知道是否已经到了文件末尾?嗯,当你读文件的时候,会有一个类似于“内置指针(inside-pointer)”的东西,它表明你读取(写入也一样)已经到了文件的哪个位置,就像记事本中的光标。而每当你调用OpenFile.get(ch)的时候,它会返回当前位置的字符,存储在ch变量中,并将这一内置指针向前移动一个字符。因此下次该函数再被调用时,它将会返回下一个字符。而这一过程将不断反复,直到读取到达文件尾。所以,让我们回到那行代码:函数seekg()将把内置指针定位到指定的位置(依你决定)。你可以使用:

ios::beg——可将它移动到文件首端

ios::end——可将它移动到文件末端

或者,你可以设定向前或向后跳转的字符数。例如,如果你要向定位到当前位置的5个字符以前,你应当写:

File.seekg(-5);

如果你想向后跳过40个字符,则应当写:

File.seekg(40);

同时,我必须指出,函数seekg()是被重载的,它也可以带两个参数。另一个版本是这样子的:

File.seekg(-5,ios::end);

在这个例子中,你将能够读到文件文本的最后4个字符,因为:

1)你先到达了末尾(ios::end)

2)你接着到达了末尾的前五个字符的位置(-5)

为什么你会读到4个字符而不是5个?噢,只须把最后一个看成是“丢掉了”,因为文件最末端的“东西”既不是字符也不是空白符,那只是一个位置(译注:或许ios::end所“指”的根本已经超出了文件本身的范围,确切的说它是指向文件最后一个字符的下一个位置,有点类似STL中的各个容器的end迭代点是指向最后一个元素的下一位置。这样设计可能是便于在循环中实现遍历)。

你现在可能想知道为什么我要使用到这个函数。呃,当我把“Hi”写进文件之后,内置指针将被设为指向其后面……也就是文件的末尾。因此我必须将内置指针设回文件起始处。这就是这个函数在此处的确切用途。

File >> str;——这也是新鲜的玩意儿!噢,我确信这行代码让你想起

了cin >> .实际上,它们之间有着相当的关联。此行会从文件中读取一个单词,然后将它存入指定的数组变量中。

例如,如果文件中有这样的文本片断:

Hi! Do you know me?

使用File >> str,则只会将“Hi!”输出到str数组中。你应当已经注意到了,它实际上是将空格作为单词的分隔符进行读取的。

由于我存入文件中的只是单独一个“Hi!”,我不需要写一个while循环,那会花费更多的时间来写代码。这就是我使用此方法的原因。顺便说一下,到目前为止,我所使用的读取文件的while循环中,程序读文件的方式是一个字符一个字符进行读取的。然而你也可以一个单词一个单词地进行读取,像这样:

char str[30]; // 每个单词的长度不能超过30个字符

while(!OpenFile.eof())

{

OpenFile >> str;

cout << str;

}

你也可以一行一行地进行读取,像这样:

char line[100]; //每个整行将会陆续被存储在这里

while(!OpenFile.eof())

{

OpenFile.getline(line,100); // 100是数组的大小

cout << line << endl;

}

你现在可能想知道应当使用哪种方法。嗯,我建议你使用逐行读取的方式,或者是最初我提及的逐字符读取的方式。而逐词读取的方式并非一个好的方案,因为它不会读出新起一行这样的信息,所以如果你的文件中新起一行时,它将不会将那些内容新起一行进行显示,而是加在已经打印的文本后面。而使用getline()或者get()都将会向你展现出文件的本来面目!

现在,我将向你介绍如何检测文件打开操作是否成功。实现上,好的方法少之又少,我将都会涉及它们。需要注意的是,出现“X”的时候,它实际可以以“o”、“i”来代替,或者也可以什么都不是(那将是一个fstream对象)。

例1:最通常的作法

Xfstream File(“cpp-home.txt”);

if (!File)

{

cout << “Error opening the file! Aborting…\n”;

exit(1);

}

例2:如果文件已经被创建,返回一个错误

ofstream File("unexisting.txt", ios::nocreate);

if(!File)

{

cout << “Error opening the file! Aborting…\n”;

exit(1);

}

例3:使用fail()函数

ofstream File("filer.txt", ios::nocreate);

if(File.fail())

{

cout << “Error opening the file! Aborting…\n”;

exit(1);

}

例3中的新出现的东西,是fail()函数。如果有任何输入/输出错误(不是在文件末尾)发生,它将返回非零值。

我也要讲一些我认为非常重要的内容!例如,如果你已经创建一个流文件对象,但你没有进行打开文件操作,像这样:

ifstream File; //也可以是一个ofstream

这样,我们就拥有一个文件句柄,但我们仍然没有打开文件。如果你打算迟些打开它,那么可以用open()函数来实现,我已经在本教程中将它介绍了。但如果在你的程序的某处,你可能需要知道当前的句柄是否关联了一个已经打开的

文件,那么你可以用is_open()来进行检测。如果文件没有打开,它将返回0 (false);如果文件已经打开,它将返回1 (true)。例如:

ofstream File1;

File1.open("file1.txt");

cout << File1.is_open() << endl;

上面的代码将会返回1(译注:指File1.is_open()函数,下句同),因为我们已经打开了一个文件(在第二行)。而下面的代码则会返回0,这是由于我们没有打开文件,而只是创建了一个流文件句柄:

ofstream File1;

cout << File1.is_open() << endl;

好啦,这一章讲得够多啦。

本文引用通告地址:https://www.sodocs.net/doc/168815116.html,/Kusk/services/trackbacks/7379.aspx

==================

C++ 中的文件输入/输出(4):检测输入/输出的状态标志

C++中的文件输入/输出(4)

原作:Ilia Yordanov, loobian@https://www.sodocs.net/doc/168815116.html,

检测输入/输出的状态标志

在此我不打算解释“标志(flags)”一词的含义,不过假如你真的完全不理解关于这方面的概念,那么将本章读过一遍之后也许你对此会得到一些认识,我也相信你同样能理解这部分的理论。尽管如此,如果你还是不明白标志在C++中的含义,我推荐你阅读一些关于这个主题的资料。

好,让我们开始吧。

C++中负责的输入/输出的系统包括了关于每一个输入/输出操作的结果的记录信息。这些当前的状态信息被包含在io_state类型的对象中。io_state是一个枚举类型(就像open_mode一样),以下便是它包含的值(译注:表中第一列为枚举值的名称,第二列为该值相应含义的描述):

有两种方法可以获得输入/输出的状态信息。一种方法是通过调用rdstate()函数,它将返回当前状态的错误标记(上表中提到的)。例如,假如没有任何错误,则rdstate()会返回goodbit.

另一种方法则是使用下面任何一个函数来检测相应的输入/输出状态:

bool bad();

bool eof(); //还记得它么?“不断读取文件内容直到到达文件末尾!”

bool fail(); //噢,这也是老朋友……检测一个打开操作是否成功

bool good();

假如badbit标志被标设(译注:原文为“If the badbit flag is up”,这里将“is up”译为“标设”,意即出现了badbit对应的错误,badbit状态被置为当前的错误状态,下同),则bad()函数返回true;假如failbit标志被标设,则fail()函数返回true;假如没有错误发生(goodbit标志被标设),则good()函数返回true;假如操作已经到达了文件末尾(eofbit被标设),则eof()函数返回true.

如果错误发生,你必须清除这些错误状态,以使你的程序能正确适当地继续运行——如果你这么打算的话。要清除错误状态,需使用clear()函数。此函数带一个参数,它是你将要设为当前状态的标志值。假使你想让你的程序“清清爽爽”地运行下去,只要将ios::goodbit作为实参。你将在以下内容中看到示例代码。

我将向你展示示例代码,以巩固你所学到的理论知识。

示例1:简单的状态检测

// 实际应用中可将 FileStream替换成你相应在使用的文件流句柄

if(FileStream.rdstate() == ios::eofbit)

cout << "End of file!\n";

if(FileStream.rdstate() == ios::badbit)

cout << "Fatal I/O error!\n";

if(FileStream.rdstate() == ios::failbit)

cout << "Non-fatal I/O error!\n";

if(FileStream.rdstate() == ios::goodbit)

cout << "No errors!\n";

示例2:clear()函数

#include

void main()

{

ofstream File1("file2.txt"); //建立file2.txt

File1.close();

// 下面的检测代码将会返回错误,这是因为我使用了ios::noreplace打开模式

// 它模式在试图打开一个已存在的文件时会返回错误

ofstream Test("file2.txt",ios::noreplace);

// 上一行将导致ios::failbit错误,我们这就将其演示出来

if(Test.rdstate() == ios::failbit)

cout << "Error...!\n";

Test.clear(ios::goodbit); // 将当前状态重置为ios::goodbit

if(Test.rdstate() == ios::goodbit) // 检测程序是否已经正确地施行了设置 cout << "Fine!\n";

Test.clear(ios::eofbit); // 将状态标志设为ios::eofbit. 无实际用途.

if(Test.rdstate() == ios::eofbit) // 检测是否已经正确地施行了设

置 cout << "EOF!\n";

Test.close();

}

除了使用标记值判断,你也可以使用函数(译注:指bad()、eof()、fail ()、good()这些函数)的形式进行判断,两者实际上是一样的——都是检测某个标记是否被标设。这些函数前面已经介绍过,我就不再重复了。如果你对如何使用它们还不是十分确定,那就重新回顾一下本教程中我曾经为你演示的应该如何检测一个文件打开操作是否成功的那部分内容。在那里我就使用了fail()函数。

本文引用通告地址:https://www.sodocs.net/doc/168815116.html,/Kusk/services/trackbacks/7381.aspx

================

C++ 中的文件输入/输出(5):二进制文件的处理

C++中的文件输入/输出(5)

原作:Ilia Yordanov, loobian@https://www.sodocs.net/doc/168815116.html,

二进制文件的处理

虽然有规则格式(formatted)的文本(到目前为止我所讨论的所有文件形式)非常有用,但有时候你需要用到无格式(unformatted)的文件——二进制文件。它们和你的可执行程序看起来一样,而与使用<<及>>操作符创建的文件则

大不相同。get()函数与put()函数则赋予你读/写无规则格式文件的能力:要读取一个字节,你可以使用get()函数;要写入一个字节,则使用put()函数。你应当回想起get()——我曾经使用过它。你可能会疑惑为什么当时我们使用它时,输出到屏幕的文件内容看起来是文本格式的?嗯,我猜这是因为我此前使用了<<及>>操作符。

译注:作者的所谓“规则格式文本(formatted text)”即我们平时所说的文本格式,而与之相对的“无格式文件(unformatted files)”即以存储各类数据或可执行代码的非文本格式文件。通常后者需要读入内存,在二进制层次进行解析,而前者则可以直接由预定好的<<及>>操作符进行读入/写出(当然,对后者也可以通过恰当地重载<<及>>操作符实现同样的功能,但这已经不是本系列的讨论范围了)。

get()函数与都各带一个参数:一个char型变量(译注:指get()函数)或一个字符(译注:指put()函数,当然此字符也可以以char型变量提供)。

假如你要读/写一整块的数据,那么你可以使用read()和write()函数。它们的原型如下:

istream &read(char *buf, streamsize num);

ostream &write(const char *buf, streamsize num);

对于read()函数,buf应当是一个字符数组,由文件读出的数据将被保存在这儿。对于write()函数,buf是一个字符数组,它用以存放你要写入文件的数据。对于这两个函数,num是一个数字,它指定你要从文件中读取/写入的字节数。

假如在读取数据时,在你读取“num”个字节之前就已经到达了文件的末尾,那么你可以通过调用gcount()函数来了解实际所读出的字节数。此函数会返回最后一次进行的对无格式文件的读入操作所实际读取的字节数。

在给出示例代码之前,我要补充的是,如果你要以二进制方式对文件进行读/写,那么你应当将ios::binary作为打开模式加入到文件打开的参数表中。

现在就让我向你展示示例代码,你会看到它是如何运作的。

示例1:使用get( )和put( )

#include

void main()

{

fstream File("test_file.txt",ios::out | ios::in | ios::binary);

char ch;

ch='o';

File.put(ch); // 将ch的内容写入文件

File.seekg(ios::beg); // 定位至文件首部

File.get(ch); // 读出一个字符

cout << ch << endl; // 将其显示在屏幕上

File.close();

}

示例2:使用read( )和write( )

#include

#include

void main()

{

fstream File("test_file.txt",ios::out | ios::in | ios::binary);

char arr[13];

strcpy(arr,"Hello World!"); //将Hello World!存入数组

File.write(arr,5); // 将前5个字符——"Hello"写入文件

File.seekg(ios::beg); // 定位至文件首部

static char read_array[10]; // 在此我将打算读出些数据

File.read(read_array,3); // 读出前三个字符——"Hel"

cout << read_array << endl; // 将它们输出

File.close();

}

本文引用通告地址:https://www.sodocs.net/doc/168815116.html,/Kusk/services/trackbacks/7382.aspx

=================

C++ 中的文件输入/输出(6):一些有用的函数

C++中的文件输入/输出(6):一些有用的函数

原作:Ilia Yordanov, loobian@https://www.sodocs.net/doc/168815116.html,

tellg() ——返回一个int型数值,它表示“内置指针”的当前位置。此函数仅当你在读取一个文件时有效。例如:

#include

void main()

{

// 假如我们已经在test_file.txt中存有了“Hello”的内容

ifstream File("test_file.txt");

char arr[10];

File.read(arr,10);

// 由于Hello占5个字符,因此这里将返回5

cout << File.tellg() << endl;

File.close();

}

tellp()——与tellg()有同样的功能,但它用于写文件时。总而言之:

当我们读取一个文件,并要知道内置指针的当前位置时,应该使用tellg();当我们写入一个文件,并要知道内置指针的当前位置时,应该使用tellp(). 由于此函数的用法与tellg()完全一样,我就不给出示例代码了。

seekp() ——还记得seekg()么?当我在读取一个文件,并想到达文件中某个特定位置时,就曾使用过它。seekp()亦如此,只不过它用于写入一个文件的时候。例如,假如我在进行文件读写,而要定位到当前位置的三个字符之前,则需调用FileHandle.seekg(-3). 但如果我是在写入一个文件,并且比如我要重写后5个字符的内容,我就必须往回跳转5个字符,因而,我应该使用FileHandle.seekp(-5) .

ignore() ——使用于读取文件之时。如果你想略过一定数量的字符,只需使用此函数。实际上,你也可以使用seekg()来代替,然而使用ignore()有一个优点——你可以指定一个特定“界限规则(delimiter rule)”,同样使得ignore()在指定的位置停下。函数原型如下:

istream& ignore( int nCount, delimiter );

nCount表示要略过的字符数量,而delimiter ——与它的名称有着同

样的含义:假如你想在文件末尾停下,则可使用EOF值传入,这样一来此函数就等同于seekg();但该参数还可以使用其他值,例如‘\n’这样可以在换行的同时定位在新行处。下面是示例:

#include

void main()

{

// 假设test_file.txt中已经存有"Hello World"这一内容 ifstream File("test_file.txt");

static char arr[10];

// 假如一直没有遇到字符"l",则向前定位直到跳过6个字符

// 而如果期间遇到"l",则停止向前,定位在该处

File.ignore(6,'l');

File.read(arr,10);

cout << arr << endl; // 它将显示"lo World!"

File.close();

}

getline() ——虽然前面的章节中我曾提到过这个函数,但还有一些内容我们未曾涉及:此函数不但可用于逐行读取,而且它还可以设为遇到某个特定字符后停止读取。下面给出传递这一参数的方法:

getline(array,array_size,delim);

以下为示例代码:

#include

void main()

{

// 假设test_file.txt中已经存有"Hello World"这一内容 ifstream File("test_file.txt");

static char arr[10];

/* 读取,直到满足下面的条件之一:

1)已经读取10个字符

2)遇到字母"o"

3)出现新一行

*/

File.getline(arr,10,'o');

cout << arr << endl; //将显示"Hell"

File.close();

}

peek() ——此函数将返回输入流文件的下一个字符,但它不移动内置指针。我想你该记得,像get()这样的函数也返回输入流文件的下一个字符,而与此同时它将移动内置指针。所以当你再次调用get()函数的时候,它会返回再下一个字符,而非前面那个。哦,使用peek()也会返回字符,但它不会移动“光标”。所以,假如你连续两次调用peek()函数,它会返回同一个字符。考虑以下代码:

#include

void main()

{

// 假设test_file.txt中已经存有"Hello World"这一内容 ifstream File("test_file.txt");

char ch;

File.get(ch);

cout << ch << endl; // 将显示"H"

cout << char(File.peek()) << endl; //将显示"e"

cout << char(File.peek()) << endl; //将再次显示"e"

File.get(ch);

cout << ch << endl; //还是显示"e"

File.close();

}

顺便说一下,我忘了讲——peek()函数实质上返回的是字符的ASCII码,而非字符本身。因此,假如你想看到字符本身,你得像我在示例中做的那样进行调用(译注:即要转为char类型)。

_unlink() ——删除一个文件。假如你要使用此函数,需要在你的程序中包含io.h头文件。下面是示例代码:

#include

#include

void main()

{

ofstream File;

File.open("delete_test.txt"); //创建一个文件

File.close();

_unlink("delete_test.txt"); //删除这个文件

// 试图打开此文件,但假如它已不存在

// 函数将返回一个ios::failbit错误值

File.open("delete_test.txt",ios::nocreate);

// 验证它是否返回该值

if(File.rdstate() == ios::failbit)

cout << "Error...!\n"; // 耶,成功了

File.close();

}

putback() ——此函数将返回最后一个所读取字符,同时将内置指针移动-1个字符。换言之,如果你使用get()来读取一个字符后再使用putback(),它将为你返回同一个字符,然而同时会将内置指针移动-1个字符,所以你再次使用get()时,它还是会为你返回同样的字符。下面是示例代码:

#include

void main()

{

// test_file.txt应包含内容"Hello World"

ifstream File("test_file.txt");

char ch;

File.get(ch);

cout << ch << endl; // 将显示"H"

File.putback(ch);

cout << ch << endl; //仍将显示"H"

File.get(ch);

cout << ch << endl; //再一次显示"H"

File.close();

}

C++文件的输入输出(讲解非常清晰)

C++中的文件输入/输出(1) 原作:Ilia Yordanov, loobian@https://www.sodocs.net/doc/168815116.html, 简介 本教程将以C++最基本的文件I/O(输出/输出)开始。此后,我将从更深入的方面,为你展示一些技巧,并分析给出一些有用的函数。 你需要对C++有一个较好的理解,否则这个教程于你而言将是陌生而毫无用处。 你的第一个程序 首先我将给出一段代码,接着再逐行进行解释。我们的第一个程序将建立一个文件,并写入一些字符: #include void main() // 程序从这里开始运行 { ofstream SaveFile(“cpp-home.txt”); SaveFile << “Hello World, from https://www.sodocs.net/doc/168815116.html, and Loobian!”; SaveFile.close(); } 仅仅如此吗?没错!这个程序将在当前运行目录下建立一个名为 cpp-home.txt的文件,并向它写入“Hello World, from https://www.sodocs.net/doc/168815116.html, and Loobian!”。 下面给出各行的含义: #include ——你需要包含此文件以使用C++的文件输入/输出函数。注意:一旦包含了这个文件,你不再需要(为了使用cout/cin)包含iostream.h,因为fstream.h已经自动包含了它。 在这个头文件中声明了若干个类,包括ifstream,ofstream及fstream,它们都继承自istream和ostream类。 ofstream SaveFile(“cpp-home.txt”); 1)ofstream即“output file stream(输出文件流)”。它将建立一个句柄(handle),以便我们以后能以一个文件流的形式写入文件。 2)SaveFile ——这是文件句柄的名字,当然,你还可以换用任何一个你想要的名称。

C语言输入输出函数格式详解

1、输入和输出: 输入:输入也叫读,数据由内核流向用户程序 输出:输出也称写、打印,数据由用户程序流向内核 以下介绍一些输入输出函数,尽管都是一些有缺陷的函数,但比较适合初学者使用 2、printf用法(其缺陷在于带缓存) printf输出时必须加上\n(刷新缓存) 解释:第一幅图没有加'\n',不会刷新缓存区,则不会打印出来;第二幅图是因为主函数结束时刷新了缓存区,但由于没有换行符,所以没有换行便显示了后面的内容;第三幅图时正常打印。 变量定义的是什么类型,在printf打印时就需要选择什么格式符,否则会造成数据的精度丢失(隐式强转),甚至会出现错误

(1)格式输出函数的一般形式 函数原型:intprintf(char * format[,argument,…]); 函数功能:按规定格式向输出设备(一般为显示器)输出数据,并返回实际输出的字符数,若出错,则返回负数。 A、它使用的一般形式为:printf("格式控制字符串",输出项列表); B、语句中"输出项列表"列出要输出的表达式(如常量、变量、运算符表达式、函数返回值等),它可以是0个、一个或多个,每个输出项之间用逗号(,)分隔;输出的数据可以是整数、实数、字符和字符串。 C、"格式控制字符串"必须用英文的双引号括起来,它的作用是控制输出项的格式和输出一些提示信息,例如:

inti=97; printf("i=%d,%c\n",i,i);输出结果为:i=97,a 语句printf("i=%d,%c\n",i,i);中的两个输出项都是变量i,但却以不同的格式输出,一个输出整型数97,另一个输出的却是字符a,其格式分别由"%d"与"%c"来控制。 语句printf("i=%d,%c\n",i,i);的格式控制字符串中"i="是普通字符,他将照原样输出;"%d"与"%c"是格式控制符;"\n"是转义字符,它的作用是换行。 (2)格式控制 格式控制由格式控制字符串实现,格式控制字符串由3部分组成:普通字符、转义字符、输出项格式说明。 A、普通字符。普通字符在输出时,按原样输出,主要用于输出提示信息。(空格属于普通字符) B、转义字符。转义字符指明特定的操作,如"\n"表示换行,"\t"表示水平制表等。 \n 换行 \f 清屏并换页 \r 回车 \tTab符 \xhh表示一个ASCII码用16进表示,其中hh是1到2个16进制数 C、格式说明部分由"%"和"格式字符串"组成,他表示按规定的格式输出数据。格式说明的形式为:% [flags] [width] [.prec] [F|N|h|l] type||%[标志][输出最少宽度][.精度][长度]类型 各部分说明如下: a、[]表示该项为可选项,即可有可无,如printf("%d",100); b、%:表示格式说明的起始符号,不可缺少。 c、flags为可选择的标志字符,常用的标志字符有: - ——左对齐输出,默认为右对齐输出 + ——正数输出加号(+),负数输出减号(-),如省略正数的+默认不显示 0 ——输出数值时指定左面不使用的空位置自动填0,如省略表示指定空位不填 # ——对c、s、d、u类无影响;对o类,在输出时加前缀0(数字0,八进制表示符);对x类,在输出时加前缀0x(字母为小写);对X类,在输出时加前缀0X(字母为大写);对e,g,f类当结果有小数时才给出小数点。 d、width为可选择的宽度指示符。 用十进制正整数表示设置输出值得最少字符个数。不足则补空格,多出则按实际输出,默认按实际输出,例如: printf("%8d\n",100); (前面空五格)100 printf("%08d\n",100); (前面5个0)100 printf("%6d\n",100); (前面空三格)100 printf("%-8d\n",100); 100(后面空五格) printf("%+8\n",100); (前面空四格)+100 e、[.prec]为可选的精度指示符 用“小数点”加“十进制正整数”表示,对“整数”、“实数”和“字符串”的输出有如下

C语言编程常用头文件

C语言编程常用头文件 C语言常用头文件总结 序号库类别头文件 1 字符处理ctype.h 2 地区化local.h 3 数学函数math.h 4 信号处理signal.h 5 输入输出stdio.h 6 实用工具程序stdlib.h 7 字符串处理string.h 字符处理函数 本类别函数用于对单个字符进行处理,包括字符的类别测试和字符的大小写转换头文件ctype.h 函数列表<> 函数类别函数用途详细说明 字符测试是否字母和数字isalnum 是否字母isalpha 是否控制字符iscntrl 是否数字isdigit 是否可显示字符(除空格外)isgraph 是否可显示字符(包括空格)isprint 是否既不是空格,又不是字母和数字的可显示字符ispunct 是否空格isspace 是否大写字母isupper 是否16进制数字(0-9,A-F)字符isxdigit 字符大小写转换函数转换为大写字母toupper 转换为小写字母tolower 地区化 本类别的函数用于处理不同国家的语言差异。

头文件local.h 函数列表 函数类别函数用途详细说明 地区控制地区设置setlocale 数字格式约定查询国家的货币、日期、时间等的格式转换localeconv 数学函数 本分类给出了各种数学计算函数,必须提醒的是ANSI C标准中的数据格式并不符合IEEE754标准,一些C语言编译器却遵循IEEE754(例如frinklin C51) 头文件math.h 函数列表 函数类别函数用途详细说明 错误条件处理定义域错误(函数的输入参数值不在规定的范围内) 值域错误(函数的返回值不在规定的范围内) 三角函数反余弦acos 反正弦asin 反正切atan 反正切2 atan2 余弦cos 正弦sin 正切tan 双曲函数双曲余弦cosh 双曲正弦sinh 双曲正切tanh 指数和对数指数函数exp 指数分解函数frexp 乘积指数函数fdexp 自然对数log 以10为底的对数log10 浮点数分解函数modf 幂函数幂函数pow 平方根函数sqrt 整数截断,绝对值和求余数函数求下限接近整数ceil 绝对值fabs 求上限接近整数floor 求余数fmod 本分类函数用于实现在不同底函数之间直接跳转代码。头文件setjmp.h io.h

输入输出答案1

输入输出 一、选择题 1.C语言中调用printf进行输出时需要注意,在格式控制串中,格式说明与输出项的个数必须相同。如果格式说明的个数小于输出项的个数,多余的输出项将A;如果格式说明的个数多于输出项的个数,则对于多余的格式将输出不定值(或0)。 如printf(“%d,%d”,a,b,c); 只输出a和b的值,c不输出 A)不予输出B)输出空格 C)照样输出D)输出不定值或0 2.在scanf函数的格式控制中,格式说明的类型与输入的类型应该一一对应匹配。如果类型不匹配,系统 B 。 A)不予接收 B)并不给出出错信息,但不可能得出正确信息数据 C)能接受正确输入 D)给出出错信息,不予接收输入 3.下列说法正确的是 D 。 A)输入项可以是一个实型常量,如scanf("%f",4.8); B)只有格式控制,没有输入项也能进行正确输入,如scanf("a=%d,b=%d"); C)当输入一个实型数据时,格式控制部分应规定小数点后的位数,如scanf("%5.3f",&f); D)当输入数据时,必须指明变量的地址,如scanf("%f",&f); 4.根据题目中已给出的数据的输入和输出形式,程序中输入/输出语句的正确是 B 。 main() { int a;float x; printf("input a,x:"); 输入语句 输出语句 } 输入形式input a,x:3 2.1 输出形式a+x=5.10 A)scanf("%d,%f",&a,&x); printf("\na+x=%4.2f",a+x); B)scanf("%d %f",&a.&x); printf("\na+x=%4.2f",a+x); C)scanf("%d %f",&a,&x); printf("\na+x=%6.1f",a+x); D)scanf("%d %3.1f",&a,&x); printf("\na+x=%4.2f",a+x); 5.以下程序的输出结果是 D 。 main() { int i=010,j=10,k=0x10; printf("%d,%d,%d\n",i,j,k);

C++文件操作详解(ifstream、ofstream、fstream)

C++文件操作详解(ifstream 、ofstream 、fstream ) C++通过以下几个类支持文件的输入输岀: ofstream: 写操作(输岀)的文件类 ifstream: 读操作(输入)的文件类 fstream: 可同时读写操作的文件类 打开 文件(Open a file ) 对这些类的一个对象所做的第一个操作通常就是将它和一个真正的文件联系起来, 也就是说打开 一个文件。被打开的文件在程序中由一个流对象 (stream object )来表示(这些类的一个实例), 而对这个流对象所做的任何输入输岀操作实际就是对该文件所做的操作。 要通过一个流对象打开一个文件,我们使用它的成员函数 open (): void ope n (const char * file name, ope nm ode mode ); 这里file name 是一个字符串,代表要打开的文件名, mode 是以下标志符的一个组合: ios::i n 为输入(读)而打开文件 ios::out 为输岀(写)而打开文件 ios::ate 初始位置:文件尾 ios::app 所有输岀附加在文件末尾 ios::tru nc 如果文件已存在则先删除该文件 ios::b inary 二进制方式 这些标识符可以被组合使用,中间以 ”或”操作符(|)间隔。例如,如果我们想要以二进制方式打 开文件"example.bin" 来写入一些数据,我们可以通过以下方式调用成员函数 open ()来实现: ofstream file; file.ope n ("example.b in ”,ios::out | ios::app | ios::b in ary ); ofstream, ifstream 和fstream 所有这些类的成员函数 ope n 都包含了一个默认打开文件的方 式,这三个类的默认方式各不相同: 类 参数的默认方式 ofstream i os::out | ios::trunc ifstream i os::in fstream ios::i n | ios::out 只有当函数被调用时没有声明方式参数的情况下, 默认值才会被采用。 如果函数被调用时声明了 任何参数,默认值将被完全改写,而不会与调用参数组合。 由于对类ofstream, ifstream 和fstream 的对象所进行的第一个操作通常都是打开文件,这 些类都有一个构造函数可以直接调用 open 函数,并拥有同样的参数。这样,我们就可以通过以 下方式进行与上面同样的定义对象和打开文件的操作: (由ostream 引申而来) (由istream 引申而来) (由iostream 引申而来)

C语言中文件_数据的输入输出_读写

C语言中文件,数据的输入输出,读写. 文件是数据的集合体,对文件的处理过程就是对文件的读写过程,或输入输出过程。 所谓文件是指内存以外的媒体上以某种形式组织的一组相关数据的有序集合。文件分类: 顺序文件,随机文件。 文本文件和二进制文件。 文本文件也称为ASCII文件,在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。 文本文件可以在屏幕上按字符显示,源程序文件就是文本文件,由于是按字符显示,所以能读懂文件内容。 二进制文件是按二进制编码方式来存放的。这里主要讨论文件的打开,关闭,读,写,定位等操作。 文件的存取方法 C程序的输入输出(I/O)有两种方式:一种称为标准I/O或流式I/O,另一种称为低级I/O。流式I/O是依靠标准库函数中的输入输出函数实现的。低级I/O利用操作系统提供的接口函数(称为底层接口或系统调用)实现输入输出,低级I/O 主要提供系统软件使用。 在C语言中用一个FILE类型的指针变量指向一个文件,(FILE类型是系统在stdio.h中定义的描述已打开文件的一种结构类型),这个指针称为文件指针。FILE *指针变量标识符; 如 FILE *fp; 文件的打开与关闭 所谓打开文件,指的是建立文件的各种有关信息,并使文件指针指向该文件,以便对它进行操作。 关闭文件则是断开指针与文件之间的联系,也就禁止再对该文件进行操作。 1、fopen 函数原型:FILE *fopen(const char *filename,const char *mode); Fopen函数用来打开一个文件,前一部分用来说明文件路径及文件名,后一部分mode指出了打开文件的存取方式;返回值是被打开文件的FILE型指针,若打开失败,则返回NULL。打开文件的语法格式如下: 文件指针名=fopen(文件名,使用文件方式); 文件指针名必须被说明为FILE类型的指针变量。 FILE *fp; fp=fopen(“C:\\Windowss\\abc.txt”,”r”); 注意用两个反斜杠\\来表示目录间的间隔符。 存取文件的模式是一个字符串,可以由字母r,w,a,t,b及+组合而成,各字符的含

C语言输入输出函数printf与scanf的用法格式

C 语言输入输出函数printf 与scanf 的用法格式 printf()函数用来向标准输出设备(屏幕)写数据; scanf() 函数用来从标准输入设备(键盘)上读数据。下面详细介绍这两个函数的用法。 一、printf()函数 printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。printf()函数的调用格式为: printf("<格式化字符串>", <参量表>); 其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出; 另一部分是格式控制字符, 以"%"开始, 后跟一个或几个控制字符,用来确定输出内容格式。 参量表是需要输出的一系列参数,可以是常量、变量或表达式,其个数必须与格式化字符串所说明的输出参数个数一样多, 各参数之间用","分开, 且顺序一一对应, 否则将会出现意想不到的错误。 例如: printf("a=%d b=%d",a,b); 1. 格式控制符Turbo C 2.0提供的格式化规定符如下: 格式控制字符 参量表 正常字符

━━━━━━━━━━━━━━━━━━━━━━━━━━ 符号作用 ────────────────────────── %d 十进制有符号整数 %u 十进制无符号整数 %f 浮点数 %s 字符串 %c 单个字符 %p 指针的值 %e,%E 指数形式的浮点数 %x, %X 无符号以十六进制表示的整数 %o 无符号以八进制表示的整数 %g,%G 自动选择合适的表示法 ━━━━━━━━━━━━━━━━━━━━━━━━━━ printf的附加格式说明字符 字符说明 l 用于长整型数或双精度实型,可加在格式 符d、o、x、u和f前面 m(代表一个正整数据最小输出显示宽度

C++文件操作详细解

C++文件操作详解(ifstream、ofstream、fstream)C++ 通过以下几个类支持文件的输入输出:

你可以通过调用成员函数is_open()来检查一个文件是否已经被顺利的打开了: bool is_open(); 它返回一个布尔(bool)值,为真(true)代表文件已经被顺利打开,假( false )则相反。 关闭文件(Closing a file) 当文件读写操作完成之后,我们必须将文件关闭以使文件重新变为可访问的。关闭文件需要调用成员函数close(),它负责将缓存中的数据排放出来并关闭文件。它的格式很简单: void close (); 这个函数一旦被调用,原先的流对象(stream object)就可以被用来打开其它的文件了,这个文件也就可以重新被其它的进程(process)所有访问了。 为防止流对象被销毁时还联系着打开的文件,析构函数(destructor)将会自动调用关闭函数close。 文本文件(Text mode files)

类ofstream, ifstream 和fstream 是分别从ostream, istream 和iostream 中引申而来的。这就是为什么 fstream 的对象可以使用其父类的成员来访问数据。 一般来说,我们将使用这些类与同控制台(console)交互同样的成员函数(cin 和 cout)来进行输入输出。如下面的例题所示,我们使用重载的插入操作符<<: // writing on a text file #include int main () { ofstream examplefile ("example.txt"); if (examplefile.is_open()) { examplefile << "This is a line.\n"; examplefile << "This is another line.\n"; examplefile.close(); } return 0; file example.txt This is a line. This is another line.

广技师C语言复习题集2.练习(输入输出)(含答案解析)

一、选择题 1. 以下程序的运行结果是。 #include int main( ) { int m=5, n=10; printf(“%d, %d\n”,m++, --n); return 0; } A.5,9 B.6,9 C.5,10 D.6,10 2. 有定义语句int a,b; ,若要通过语句scanf(“%d, %d”, &a, &b); 使变量a得到数值6,变量b得到数值5,下面形式中错误的是。(注:□代表空格) A.6,5<回车> B.6,□□5<回车> C.6 5<回车> D.6,<回车> 5<回车> 3. 以下程序的输出结果是。(注:□代表空格) #include int main( ) { printf(“\n*s1=%15s*”, “chinabeijing” ); pirntf(“\n*s2=%-5s*”, “chi”); return 0; }

A.*s1=chinabeijing□□□* B.*s1=chinabeijing□□□* *s2=**chi* *s2=chi□□* C.*s1=*□□chinabeijing* D.*s1=□□□chinabeijing* *s2=□□chi* *s2=chi□□* 4. 已有如下定义语句和输入语句,若要求a1, a2, c1, c2的值分别为10、20、A和B,当从第一列开始输入数据时,正确的数据输入方式是。(注:□代表空格) int a1,a2; char c1, c2; scanf(“%d%c%d%c”,&a1,&c1,&a2,&c2); A.10A□20B<回车> B.10□A□20□B<回车> C.10□A□20B<回车> D.10A20□B<回车> 5. 已有定义int x; float y; 且执行scanf(“%3d%f”, &x,&y); 语句,若从第一列开始输入数据12345□678<回车>,则x的值为(1),y的值为(2)。(注:□代表空格) (1)A.12345 B.123 C.45 D.345 (2)A.无定值B.45.000000 C.678.000000 D.123.000000 6. 阅读以下程序,当输入数据的形式为25,13,10<回车>,程序的输出结果为。 #include int main( ) { int x,y,z;

C语言数据的输入与输出

C语言数据的输入与输出 一.Printf函数 函数原型在头文件stido.h中(使用时可以不包括) printf函数的返回值等于成功输入得数据的个数 1.printf函数得一般调用形式 printf(格式控制字符串,输出项列表) 格式控制字符串包括: (1)格式指示符 格式:%[标志][宽度][.精度][[h|l]<类型>] (2)转义字符 如:'\n','\0' (3)普通字符 如:printf("max=%d,min=%d\n",a,b); “max=”和“,min=”是普通字符;“%d”是格式指示符;“\n”是转义字符; a和b是输出类表中的输出项(可以是常量、变量、或表达式)。 2.print函数中常用得格式控制说明 (1)数据类型控制字符 格式字符说明 %c输出一个字符 %d或%i以十进制形式输出一个带符号得整数(正数不输出符号) %u以十进制形式输出无符号整数。若有符号则自动将符号位转化为数值位,%o 和%x也具有类似得功能 %o以八进制形式输出无符号整型数(不带前导0) %x或%X以十六进制形式输出无符号整型数(不带前导0x或0X)。对于十六进制数中的字符abcdef,用%x时输出得是小写字母,%X时输出的是大写字母 %f以小数形式输出单精度或双精度实数 %e或%E以指数形式输出单精度或双精度实数 %g或%G有系统决定是采用%f还是%e格式,以使输出结果的总宽度最小,并且不输出没意义的0 %s依次输出字符串中得各个字符,知道遇到'\0'是结束 (2)数据类型修饰符 数据类型修饰符在%和数据类型控制符之间 如:长整型"%ld",短整型"%hd" (3)输出数据所占得宽度与精度

人教课标A版高中数学必修三课后作业5输入语句、输出语句和赋值语句

课后作业(五) (时间45分钟) 学业水平合格练(时间25分钟) 1.下列赋值语句正确的是() A.S=S+i2B.A=-A C.x=2x+1 D.P=x [解析]在程序语句中乘方要用“∧”表示,所以A项不正确;乘号“*”不能省略,所以C项不正确;D项中x应用SQR(x)表示,所以D项不正确;B选项是将变量A的相反数赋给变量A,则B项正确. [答案] B 2.下列正确的语句的个数是() ①输入语句INPUT a+2 ②赋值语句x=x-5 ③输出语句PRINT M=2 A.0 B.1 C.2 D.3 [解析]①中输入语句只能给变量赋值,不能给表达式a+2赋值,所以①错误;②中x=x-5表示变量x减去5后再赋给x,即完成x=x-5后,x比原来的值小5,所以②正确;③中不能输出赋值语句,所以③错误. [答案] B 3.下列程序运行的结果是() M=3 N=M+1 M=M-1 y=M+N PRINT y END

A.6 B.7 C.8 D.9 [解析]该程序的运行过程是 M=3, N=3+1=4, M=3-1=2, y=2+4=6, 输出6. [答案] A 4. 在如图所示的程序中输入x=1000,y=2,则输出的结果M 是( ) C.2020 D.2015 [解析]由程序得M=2×1000+6×2+3=2015. [答案] D 5.给出下面的程序: INPUT“实数”;x1,y1,x2,y2 a=x1-x2 m=a^2 b=y1-y2 n=b^2 S=m+n d=SQR(S) PRINT d END

此程序的功能是() A.求点到直线的距离 B.求两点之间的距离 C.求一个多项式函数的值 D.求输入的值的平方和 [解析]输入的四个实数可作为两个点的坐标,程序中的a,b 分别表示两个点的横、纵坐标之差,而m,n分别表示两点横、纵坐标之差的平方;S是横、纵坐标之差的平方和,d是平方和的算术平方根,即两点之间的距离,最后输出此距离. [答案] B 6.下列程序的运行结果为________. m=1 n=2, p=3 p=m n=p m=n PRINT m,n,p END [解析]此程序主要以赋值语句来设计,其作用是首先对变量m,n,p分别赋值1,2,3,然后将变量m的值赋给p,再将变量p的值赋给n,最后将变量n的值赋给m,所以最后变量m,n,p的值都等于1,运行结果输出1,1,1. [答案]1,1,1 7.读下列程序,完成问题。 程序:

C#中的文件读写操作详解

C#中的文件读写操作详解(摘自互动维客:https://www.sodocs.net/doc/168815116.html,,更多内容 请访问互动维客!) C#中的文件操作详解 微软的.Net框架为我们提供了基于流的I/O操作方式,这样就大大简化了开发者的工作。因为我们可以对一系列的通用对象进行操作,而不必关心该I/O操作是和本机的文件有关还是和网络中的数据有关。.Net框架主要为我们提供了一个System.IO命名空间,该命名空间基本包含了所有和I/O操作相关的类。 本文将向大家介绍一些基本的文件操作方法,包括对文件系统中的目录和文件的操作,还有就是文件的读写操作等。通过运用System.IO.DirectoryInfo类和System.IO.FileInfo类我们可以轻易的完成与目录和文件相关的操作,而通过运用System.IO.StreamReader类和System.IO.StreamWriter类我们可以方便的完成与文件的读写相关的操作。 命名空间概览 下面的表格显示了System.IO命名空间中最重要的一些类,通过运用这些类我们就能完成基本的文件操作。 表1 类名功能和用途 BinaryReader、BinaryWriter 读写二进制数据 Directory、File、DirectoryInfo以及FileInfo 创建、删除并移动目录和文件,通过属性获取特定目录和文件的相关信息 FileStream 以随机方式访问文件 MemoryStream 访问存储在内存中的数据 StreamReader 、StreamWriter 读写文本数据信息 StringReader、StringWriter 运用字符串缓冲读写文本数据信息 运用DirectoryInfo类和FileInfo类 DirectoryInfo类和FileInfo类的基类都是FileSystemInfo类,这个类是一个抽象类,也就是说你不可以实例化该类,只能通过继承产生其子类并实例化其子类。然而你却可以运用由该类定义的各种属性,下面的表格显示了该类已经定义了的各种属性。 表2 属性功能和用途

c语言输入输出函数知识点总结

c语言输入输出函数知识点总结 1.I/O input output(输入端,输出端) 输入:从计算机向外部输出设备(显示器,打印机)输出数据。 输出:从输入设备(键盘、鼠标、扫描仪)向计算机输入数据。 2.C语言本身不提供输入输出语句,输入和输出操作是由C函数库中的函数实现的。 3.字符输出函数一般形式:putchar(a);a可以是字符型变量、整型变量、字符常量、整型常量。函数作用:向终端输出一个字符。 4.字符输入函数一般形式:a=getchar( );函数作用:从终端输入一个字符。函数值:从输入设备得到的字符。 5.格式输出字符 %d:以十进制输出整数;%o:以八进制形式输出整数;%c:以字符形式输出一个字符;%s:输出字符串;%f:以小数形式输出单、双精度数,隐含输出六位小数。 6.getchar一次只能输入一个字符,有几个getchar()就输入几个字符,多输入的计算机不能识别。 7.getchar()输入的时候,空格键、Enter键、Tab键不能乱用,他们都当成字符对待。 printf("%d,%c,%f,%o,%x,%s",a,b,c,d,e,f); .......................................... 8.格式控制都是小写字母; 9.格式控制与后面要输出的变量是一一对应;................................................... 10.printf("%md",a); 1).m是整数; 2).m是指输出的结果占m列宽度; 3).m是正整数的话,输出结果差几列左补几个空格; m是负整数的话,输出结果差几列右补几个空格; 4).如果m的绝对值小于原来数的宽度,则原样输出。................................................... 11.printf("%m.nf",a); 1).m是指输出占几列宽度,n是指输出结果小数点后保留几位有效数字; 2).m是正整数的话,输出结果差几列左补几个空格; m是负整数的话,输出结果差几列右补几个空格; 3).printf("%2.5f",a); m

第1章 1.2.1 输入语句、输出语句和赋值语句 学案

§1.2 基本算法语句 1.2.1 输入语句、输出语句和赋值语句 【明目标、知重点】 1.理解输入语句、输出语句、赋值语句的作用. 2.理解这些语句与相应逻辑结构的关系,并能转化为程序语句. 【填要点、记疑点】 1.输入语句 (1)格式:INPUT “提示内容”;变量 (2)功能:输入提示内容要求的相应信息或值.即把程序中新输入的值赋给变量. 2.输出语句 (1)格式:PRINT “提示内容”;表达式 (2)功能:????? ①输出常量、变量的值和系统信息;②进行数值计算并输出结果. 3.赋值语句 (1)格式:变量=表达式. (2)功能:将表达式所代表的值赋给变量.即将表达式所代表的值赋给变量,一般先计算“=”右边表达式的值,然后把这个值赋给“=”左边的变量. 【探要点、究所然】 [情境导学] 前面我们学习了算法的步骤设计、算法的程序框图的画法,为了让计算机能够 理解算法步骤、程序框图,我们必须把它们转换成算法语句.我们先一起来学习输入、输出语句和赋值语句. 探究点一 简单的程序设计语言 思考1 想一想计算机能够“理解”的语言与人的语言有什么区别? 答 计算机不同于人,人有大脑,可以思考问题,而计算机对自然语言和程序框图描述的算法无法识别,必须转化为其能理解的语言,即程序语言. 思考2 阅读教材21页回答基本的算法语句有哪些?各自对应怎样的算法结构? 答 基本的算法语句????? ? ????输入语句输出语句赋值语句对应顺序结构条件语句——对应条件结构循环语句——对应循环结构

探究点二输入语句、输出语句 问题用描点法作函数y=x3+3x2-24x+30的图象时,需要求出自变量和函数的一组对应值.编写程序,分别计算当x=-5,-4,-3,-2,-1,0,1,2,3,4,5时的函数值. 思考1如何设计算法步骤?如何根据算法步骤画出程序框图? 答第一步,输入一个自变量x的值. 第二步,计算y=x3+3x2-24x+30. 第三步,输出y. 其程序框图: 思考2如果将思考1中的程序框图中第一个程序框省略,后四个程序框中的内容依次写成算法语句,就得到该算法的计算机程序: INPUT “x=”;x y=x^3+3*x^2-24*x+30 PRINT y END 在上述计算程序中包含哪几种语句? 答1.这个程序由4个语句行组成,分别是输入语句、赋值语句、输出语句,最后一行的END语句表示程序到此结束. 思考3阅读教材22页下半页,谈谈输入语句的一般格式及注意事项分别是什么? 答输入语句的一般格式:INPUT“提示内容”;变量?INPUT“x”;x. 注意事项:(1)INPUT语句的作用:用来向变量提供数据,实现算法的输入信息功能.可以给多个变量赋值,例如INPUT“a,b,c=”;a,b,c. (2)“提示内容”提示用户输入什么样的信息,变量是指程序在运行时其值是可以变化 的量. (3)输入语句要求输入的值只能是具体的常数,不能是函数、变量或表达式. (4)提示内容与变量之间用“;”隔开,若输入多个变量,变量与变量之间用“,”隔开. (5)“提示内容”和它后面的“;”可以省略;如INPUT“x”;x或INPUT x. (6)无计算功能,用户由键盘输入的数据必须是常量.

用户配置文件操作详解

用户配置文件操作详解 系统崩溃了怎么办?重装系统!但每次重装系统时大家是否始终感觉新装系统的电脑操作不方便呢?例如进论坛要重新输入帐号密码,桌面背景也不是自己喜欢的图案,以前收藏的网页也不知所踪……其实面对这些问题,我们只要备份了用户配置文件,我们所有的个性化设置都能在系统重装后轻松恢复过来。 Windows 2000/XP/2003等操作系统都提供了非常完善的用户管理机制,每个登陆计算的账户都会有独立的文件夹用于保存该登陆账号的个性化信息,这种独立分开的方式也为我们备份和保护个人数据提供了可能。 1.找到个人数据的家 在了解如何备份个人数据之前我们首先要了解用户配置文件到底是如何工作的,只有了解了它的工作原理我们才能实现个人数据的轻松、快速备份。 当我们的操作系统(Windows 2000/XP/2003)安装完成后,在首次登录的时候操作系统会为当前登录的帐号建立一个用户配置文件夹,默认这个文件夹会位于“C:\Documents and Settings”下,我们可以选择“开始”-“运行”,输入“%SystemDrive%\Documents and Settings”即可打开该文件夹。这个文件夹默认会使用当前登录的用户名作为名字,但是如果在“Documents and Settings”文件夹中存在与当前登录用户名相同的文件夹,系统就会修改这个文件夹的名字以避免重复。例如,当前登录的用户名为ABC,默认系统会在第一次登陆的时候建立ABC文件夹,但是如果ABC文件夹存在则会尝试将名字改为“ABC.计算机名”,如果“ABC.计算机名”也存在,Windows则会尝试将文件夹命名为“ABC.计算机名.000”,如果仍然存在这样命名的文件夹则系统就会尝试“ABC.计算机名.001”、“ABC.计算机名.002”等。 2.挽救丢失的个人数据 有了上边的介绍的原理,接下来我们再尝试恢复丢失的用户数据就不再是一件非常困难的事情了,首先我们来解决开机后桌面背景、快捷方式和我的文档中数据统统丢失的问题。 Step 1 如果你只是想找回原来配置文件中的一些数据可以进入“Documents and Settings”文件夹,然后按照时间排序,你将可以看到多个以你当前用户名开头的文件夹,选择时间相对较久的那个并尝试双击进入,如果提示拒绝访问则可以注销计算机使用“administrator”帐号登录,登录后重新找到这个文件夹并在上边单击鼠标右键,选择“属性”-“安全”(如果找不到“安全”标签,可以选择“工具”-“文件夹选项”,取消使用简单文件共享前边的勾选),然后单击里边的“高级”按钮,在弹出的窗口中选择“所有者”,在里边选中“administrator”并勾选中下边的“替换子容器及对象的所有者”,如图1所示。设置完成后单击“应用”按钮。

Word的基本操作详解

第五章中文Word2000 第一节使用入门 一、启动Word2000中文版 方法1 [开始][程序][Microsoft Word] 方法2 用鼠标单击“开始”按钮,在打开“开始”菜单后,选择“新建Office文档”或“打开Office文档”(如果我们的计算机上已存有Word文档的话)并单击之。 方法3 如果“Office快捷工具栏”显示在屏幕上,用鼠标单击“Microsoft Word”图标按钮即可启动中文Word2000。 方法4 在桌面上制作一个中文Word2000的快捷键,以后只要用鼠标的左键双击此快捷键,就可以启动中文Word2000。 方法5 在“我的电脑”或“资源管理器”中,双击扩展名为.DOC 的文档。 二、Word2000工作环境 1、W ord2000应用程序窗口的组成 标题栏、菜单栏、工具栏和状态栏。 工具栏的显示与隐藏:[视图][工具栏],再在级联菜单中,选中要显示的工具栏或取消要隐藏的工具栏即可。 2、W ord2000文档窗口 标题栏、菜单栏、工具栏、标尺、水平、垂直滚动条,状态栏、工作区。 注意:

●在Word2000中的滚动条与常用窗口滚动条的区别。在垂直滚动条中多三个按钮,“选择浏览对象”按钮。在水平滚动条左边有“视图”按钮。 ●文字插入点标志、文件结束标志、段落结束标志: 3、使用菜单和对话框。:快捷菜单 4、帮助功能 1)Office 助手 2)[帮助][目录和索引] 3)屏幕提示:[帮助][这是什么?] 三、创建文档的操作步骤 1.新建文档 2.文字录入:包括文字、符号、图片、公式和艺术字等。要注意的 是:当用户输入文件达到行末时,WORD能自动移到下一行,称为自动换行,而不必按回车键,除非用户想开始新的一段或增加一空行。 3.编辑:用户可在WORD的帮助下进行插入、删除、修改、复制、移 动等操作。(剪贴板) 4.文件格式设置及排版:通过格式设置可以控制文件的外观显示。 例如设置黑体、斜体、下划线、使正文居中、左排等等。在文件中,还可以添加所需的图画与表格,从而将文件修饰得更加美观。 (工具按钮)

对文件的输入与输出

对文件的输入与输出 10.1 C文件的有关基本知识 什么是文件: 文件有不同的类型,在程序设计中,主要用到两种文件: (1)程序文件。包括源程序文件(后缀为.c)、目标文件(后缀为.obj)、可执行文件(后缀为.exe)等。 (2)数据文件。文件的内容不是程序,而是供程序运行时读写的数据,如在程序运行过程中输出到磁盘(或其他外部设备)的数据,或在程序中供读入的数据。 操作系统把各种设备都统一作为文件来处理。 所谓“文件”一般指存储在外部介质上数据的集合。 输入输出是数据传送的过程,称为流(stream),即数据流。 C语言把文件看作是一个字符(或字节)的序列,即由一个一个字符(或字节)的数据顺序组成。 文件名: 一个文件要有一个唯一的文件标识,以便用户识别和引用。 文件标识包括3部分: 1.文件路径 2.文件名主干 3.文件后缀 如下: D:\CC\temp\ file.dat 文件路径文件名主干文件后缀 文件名主干的命名规则遵循标识符的命名规则。 文件的分类: 根据数据的组织形式,数据文件可分为ASCII文件和二进制文件。

ASCII文件又称文本文件(text file),每一个字节放一个字符的ASCII代码。 ANSI C标准采用“缓冲文件系统”处理数据文件,所谓缓冲文件系统是指系统自动地在内存区为程序中第一个正在使用的文件开辟一个文件缓冲区。 定义一个指向文件类型数据的指针变量: FILE *fp; 定义fp是一个指向FILE类型数据的指针变量。可以使fp指向某一个文件的文件信息区(是一个结构体变量),通过该文件信息区中的信息就能够访问该文件。也就是说,通过文件指针变量能够找到与它相关联的文件。 注意:指向文件的指针变量并不是指向外部介质上的数据文件的开头,而是指向内存中的文件信息区的开头。 10.2 打开与关闭文件 所谓“打开”是指为文件建立相应的信息区(用来存放有关文件的信息)和文件缓冲区(用来暂时存放输入输出的数据)。 用fopen函数打开数据文件: ANSI C规定了用标准输入输出函数fopen来实现打开文件。fopen函数的调用格式: fopen(文件名,使用文件方式); 例如: fopen(“a1”,”r”); 用fclose函数关闭数据文件: “关闭”就是撤销文件信息区和文件缓冲区,使文件指针变量不再指向该文件,也就是文件指针变量与文件“脱钩”,此后不能再通过该指针对原来与其相联系的文件进行读写操作,除非再次打开,使该指针变量重新指向该文件。 关闭文件用fclose函数。fclose函数调用的一般形式: fclose(文件指针);

pascal-带格式的输出语句及输入语句

1.文件的打开与保存 2.文件的输入与输出语句(结合常量与变量、数的科学记数法) 3.类型:溢出的理解 带格式的输出语句及输入语句 一、写语句的输出格式 在pascal语言中输出数据时是可以按照一定格式的,对整数隐含的输出形式为按十进制数形式。对实数的输出,隐含的形式是科学记数法形式(如果不想用科学记数法输出而用小数形式输出,要自己另行定义)。 事实上,输出语句中的每个输出项中的表达式之后可以加上格式说明,若输出项后没有加格式说明,则数据按系统隐含的格式输出,还可加上一定格式符号按特定格式输出。 ⒈隐含的输出格式 pascal语言为整型量、实型量、布尔型量和字符串( 用一对单引号括起来的字符序列)规定了每种数据所占的宽度(即一个数据占几列) ,一个数据所占的宽度称为"场宽"或"字段宽"。系统给出的隐含场宽称为标准场宽。每一种pascal版本给定的标准场宽不尽相同。下表给出标准pascal和pc机上两种pascal版所规定的标准场宽。 标准场宽 ━━━━━━━━━━━━━━━━━ 数据类型标准pascal Turbo pascal ───────────────── integer 10 实际长度 real 22 17 布尔型10 4或5 字符串串长串长 ━━━━━━━━━━━━━━━━━ 在Turbo Pascal系统中,对于整型字符串的输出都是按数据本身长度输出,对于布尔型数据(只有True和False两种值),TRUE为4列,FALSE为5列,一律采用大写输出。而real 型数据的输出时,则按17列输出,其中第一列为符号位,正号不显示,后四位为"E±nn",中间的12列为尾数部分。如: writeln(sqrt(75)); 则输出□8.6602540379E+00。 而writeln(sqrt(81)); 则输出□9.0000000000E+00。 有时,在程序中往往根据实际情况,需要自己定义场宽。 ⒉指定场宽 在写语句中输出项含有格式符号时,就是为了指定场宽。 ⑴指定单场宽. 格式:write(表达式:N)或writeln(表达式:N),其中N为自然数,指定单场宽后,所有数据不再按标准场宽输出,而按指定场宽输出。若数据实际长度小于指定场宽时,则一律"向右

相关主题