【总结】C/C++输入输出不完全总结(待续)
1. C风格 FILE*, fwrite, fread
语法为:
#include<cstdio>或者#include<stdio.h>
FILE* fd = fopen(<文件名字符串>,"<参数>");//文件名字符串的类型一般是字符串常量或者字符串数组 const char*
//写到文件 从起始地址begin起,写入number个size字节的数据
fwrite(<要写进文件的内存起始地址begin>,<单元大小size>,<单元个数number>,<文件对象fileobj>);
//读文件
fread();
fclose();
fgetc();读字符
fputc(); 写字符
fputs(); 写字符串
实例代码
#include<cstdio>或者#include<stdio.h>
voidDataset::dumpData(constchar savefile[],int numDatam double* data,double* label){
FILE* fd = fopen(savefile,"wb+");
if(fd = NULL){
printf("file doesn't exist: %s\n", savefile);
exit(1);
}
fwrite(&numData,sizeof(int),1, fd);
fwrite(&numFeature,sizeof(int),1, fd);
if(label != NULL){
fwrite(&numLabel,sizeof(int),1, fd);
}
fwrite(data,sizeof(double), numData*numFeature, fd);
if(label != NULL){
fwrite(label,sizeof(double), numData*numLabel, fd);
}
fclose(fd);
}
相关知识:
FILE不是关键字,而是一个自定义数据类型,用于变量声明,它的定义在stdio.h中,具体定义如下:
typedefstruct
{
unsignedchar*curp;/* Current active pointer */
unsignedchar*buffer;/* Data transfer buffer */
int level;/* fill/empty level of buffer */
int bsize;/* Buffer size */
unsignedshort istemp;/* Temporary file indicator */
unsignedshort flags;/* file status flags */
wchar_t hold;/* Ungetc char if no buffer */
char fd;/* file descriptor */
unsignedchar token;/* Used for validity checking */
} FILE;
函数原型
size_t fread(void* buffer,size_t size,size_t count, FILE* stream);
strtok_r
2. C风格 fscanf(), getc(), fgets(), sscanf()
语法:
实例代码:
svmdataset
3. **C风格 readline(FILE* INPUT), fgets(), strrchr, **
语法:
实例代码:
svm.cpp
4. C++风格 fstream, is_open(), read(), seekg(), tellg()
语法:
实例代码:
voidMNISTDataSet::loadData(constchar* filepath){
fstream infile(filepath, ios::in|ios::binary);
if(!infile.is_open()){
cout <<"cannot open the file"<< endl;
return;
}
}
相关知识:
5. C++风格 getline(), istringstream, >>
语法:
实例代码:
voidDataReader::read(vector<fv_type>& allfv, vector<label_type>& labels){
string line;
allfv.reserve(2400000);
labels.reserve(2400000);
allfv.clear();
labels.clear();
int counter =0;
}
相关知识:
A mind needs books like a sword needs a whetstone.