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
输入流,把文件的东西读到流里面。
例如
这里就是把utf8读到input里面去了。
3,getline
从流元素里读到变量里。如果是getline(流,变量,停止符)。
停止符如果不填也就是getline(流,变量)那么默认为\n。
流的位置填流元素,一般是自己定义的流或者cin这种,而变量也是自己定义的。
4,snprintf
也是跟getline一样可以有不同数量的变量。
这个函数用于把后面的字符串(也可以是其他元素)放到前面的变量里面来。这里的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失败,所以常加入
8,feof
刚才上面有写这个函数,用于判断是否是流上文件的结束符。既可用于二进制文件也可判断文本文件。
原话是:feof(fp)有两个返回值:如果遇到文件结束,函数feof(fp)的值为非零值,否则为0。
需要注意的事:
因为常与fgetc一起用,但是fgetc是读当前返回的元素,也就是说,读完最后一个元素之后再get一次才会get到EOF,这时如果还返回,就会多输出一个不合法值,所以一般这么用。
也就是说先printf再get。
与EOF的区别:
其实概念上就有区别,如果是判断是否结尾的建议全用feof。
EOF其实只是一个变量,他是文件读到最后的时候返回的变量,也就是get == EOF来判断是否是结尾。但是常常出现很多问题,因为在二进制文件里面的EOF标识符很多,而且往往都不是在结尾。
而且还有一个更严重的问题,就是cget遇到错误也会返回EOF,所以EOF在很大程度上根本就不能用于检测文件结尾。
相反,feof的检测机制是测试当前文件指针是否在文件末,相对来说安全得多。
这两个系列的函数都是用于断言,也就是说判断是否满足要求,满不满足都会输出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的检测机制是测试当前文件指针是否在文件末,相对来说安全得多。
相关文章推荐
- C++基本输入、输出函数
- C++中输入输出流getline()函数用法
- c语言和C++输入输出流的基本操作
- 4-python基础python的基本语法之标准输入函数
- C++输入输出流对象基本操作
- C++基本语法记之 explicit
- C++的输入输出流、文件操作
- C++基本语法(上)(精品)
- C++异常的基本语法与应用
- mysql存储过程基本语法和函数
- C/C++中的一些基本语法(define/typedef)
- C++基本语法记之 void f() const
- C++文本文件处理示例(文件输入输出流)
- 再读C++ Primer 写了些小例子来熟悉C++基本语法
- C++基本语法记之友元
- [转]C++重读一:C++基本语法(上)
- C++中的文件输入/输出(6):一些有用的函数
- CG学习(2)——CG的基本语法及核心函数的面向对象简单封装
- C++异常的基本语法与应用
- C++重读二:C++基本语法(下)