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

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的检测机制是测试当前文件指针是否在文件末,相对来说安全得多。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值