您的位置:首页 > 编程语言 > C语言/C++

C++输入输出流的基本函数及语法

2014-12-03 21:00 288 查看
1,EXPECT_*系列和ASSERT_*系列。

这两个系列的函数都是用于断言,也就是说判断是否满足要求,满不满足都会输出log。

举个例子,EXPECT_EQ(3,Add(1, 3))这里就是判断3和Add(1, 3)是否相等,然后在结果中输出

g:\myproject\c++\gtestdemo\gtestdemo\gtestdemo.cpp(16):

error: Value of: Add(1, 3) Actual: 4 Expected:3

这里会返回error,因为前面是3所以要equal的话后面也要等于3,所以期望是3,但是1+3实际

返回了4,所以error。

其他类型还有EXPECT_TRUE和EXPECT_FALSE等等。

接下来我说说两者的区别,EXPECT_用于打出信息,如果是否error都会往下执行,也就说用于

查看。

而ASSERT_用于检查,一旦检查失败就退出当前函数(不是退出当前程序)。

注意:只有失败了error才会打出信息,成功是不会打的。

强化:如果遇到特殊情况,例如在循环里面报错了,那根本就不知道是i = ?的时候退出的,所以

加入了新的元素,<<.

例子,EXPECT_TRUE(FALSE)<<"mimida?"<<i;

输出的是

g:\myproject\c++\gtestdemo\gtestdemo\gtestdemo.cpp(16):
error: Value of:FALSE Actual: FALSE,Expected:TRUE
mimida?8(i=8)//这一行是输入输出流打出来的

2,ifstream

输入流,把文件的东西读到流里面。

例如

std::ifstream input("./case/encoding/utf8");


这里就是把utf8读到input里面去了。

3,getline
从流元素里读到变量里。如果是getline(流,变量,停止符)。
停止符如果不填也就是getline(流,变量)那么默认为\n。
流的位置填流元素,一般是自己定义的流或者cin这种,而变量也是自己定义的。

4,snprintf
也是跟getline一样可以有不同数量的变量。

snprintf(input, sizeof(input), "%s", line.c_str());

这个函数用于把后面的字符串(也可以是其他元素)放到前面的变量里面来。这里的line是string类型。

第一个填要被放的变量,第二个是长度,如果太长插不进去,就截断成size-1,最后一个放\0.
如果太短就直接在后面放\0。
解释一下这里为什么用c_str(),这个是取字符串的首元素的地址,也就是char*。一般用于把字符串string放到char*里面去。
这里顺便说一下string的好处就是不用自己定义长度,也就是说你不知道有多长的时候可以用string。

5,fgetc和fputc
双生的两个函数。get是从文件指针stream指向的文件中读取一个字符,读取后光标自动后移。返回值是你自己读的元素。当读到文件末尾或者出错的时候返回EOF。
put刚好相反,是写入一个元素,写完光标后移,可以写入字符常量或者变量。如果被写入的文件不存在则创建一个。如果写入成功则返回写入的字符,否则返回EOF。
例子:
while(!feof(stream))
fgetc(fputc(stream),stream);
这个例子是一个自己给自己写的例子,到文件末尾就会停止。

6,fprintf
格式化输出到流文件。
int fprintf(FILE *stream,char *format,[argument])

format可以填一些其他东西用于定规则或者拓展变量,例如填“%s”表明只输出string,而%*.s则是定长的string,这里有两个变量,分别是size和string。
这里注意stream可以填stderr用于输出信息到终端fprintf(stderr,"error"),一般文件流的输出不用print而用这个方式,因为可以防止文件互相流-》的时候误写。

7,fopen
打开文件的函数。
FILE * fopen(const char * path,const char * mode);

前面返回的是流,以后就用这个file来操作了,path是地址,mode有很多方式。因为很容易会open失败,所以常加入

if(fp==NULL) //如果失败了
{

printf("错误!");

exit(1); //中止程序

}


8,feof
刚才上面有写这个函数,用于判断是否是流上文件的结束符。既可用于二进制文件也可判断文本文件。
原话是:feof(fp)有两个返回值:如果遇到文件结束,函数feof(fp)的值为非零值,否则为0。
需要注意的事:
因为常与fgetc一起用,但是fgetc是读当前返回的元素,也就是说,读完最后一个元素之后再get一次才会get到EOF,这时如果还返回,就会多输出一个不合法值,所以一般这么用。

也就是说先printf再get。
与EOF的区别:
其实概念上就有区别,如果是判断是否结尾的建议全用feof。
EOF其实只是一个变量,他是文件读到最后的时候返回的变量,也就是get == EOF来判断是否是结尾。但是常常出现很多问题,因为在二进制文件里面的EOF标识符很多,而且往往都不是在结尾。
而且还有一个更严重的问题,就是cget遇到错误也会返回EOF,所以EOF在很大程度上根本就不能用于检测文件结尾。
相反,feof的检测机制是测试当前文件指针是否在文件末,相对来说安全得多。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: