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

C++可使用的IO

2012-08-28 16:01 169 查看
题目:键盘输入一系列数字(-1结束),输出到a文件中

分别用C++的库,ISO C的库实现,又用getline实现整行的读取(包括空格)。cin、scanf、都是以空格和换行来标志一个输入的,如果输入1 2 3(注意中间有空格)会产生三个输入值。但是如果想输入一个字符串,比如“hello world”那么用cin和scanf就不好用了,用getline可以读入包括空格的一整行字符串。也可以用fgets从标准输入读取一行(包含空格)。这里注意,fgets和getline都把换行符号读入了,而cin和scanf都没有读入换行符,这样在输出的时候要特别注意。下面是这三种的用法

#include <iostream>
#include <fstream>
using namespace std;

//键盘输入一系列数字(-1结束),输出到a文件中

void storeNumbersCPlus();
void storeNumbersC();
void getLineDemo();

int main()
{

//storeNumbersCPlus();
storeNumbersC();
//getLineDemo();
return 0;
}

void storeNumbersCPlus()
{
//C++的标准库的实现
//ofstream out("a", ofstream::out | ofstream::app); //app为append在末尾添加的意思,否则每次都会清除a中的内容的
ofstream out("a", ofstream::out);
if(!out)
{
cerr<<"open failed"<<endl;
return;
}
int n;
while(cin>>n)
{
if(n == -1)
break;
else
out<<n<<endl;//这里必须加个endl或者空格,否则数据之间没有分割,在读的时候会当作一个数据读出来的
}
out.close();

cout<<"The numbers are:"<<endl;

ifstream input("a");//等价于ifstream input("a", in);默认的状态为in
if(!input)
{
cerr<<"error: unable to open file"<<endl;
return;
}
char s[100] = {0};
while(input >> s)
cout<<s<<endl;
input.close();
}

void storeNumbersC()
{
//ISO C的标准库的实现
FILE *file = fopen("b", "w");
if(file == NULL)
{
cout<<"open failed!"<<endl;
return;
}
char buffer[10] = {0};
while(1){
//scanf("%s", buffer); //也可以用scanf
if(NULL == fgets(buffer, 10, stdin))
break;
if(0 == strcmp(buffer, "-1\n"))
break;
else
{
fputs(buffer, file);
//fputs("\n", file); //这里要特别注意,如果是用scanf读取的数据,要加的为换行,否则用fgets读取一行的时候,会读出“1 2 3 4”这样的数据
}
}
fclose(file);

cout<<"The numbers are:"<<endl;

FILE *fOut = fopen("b", "r");
if(fOut== NULL)
{
cout<<"open failed!"<<endl;
return;
}
char outBuf[10] = {0};
while(NULL != fgets(outBuf, 10, fOut))
printf("%s", outBuf);

}

void getLineDemo()
{
char *line = NULL;
size_t len = 0;
ssize_t read = 0;
FILE *fp = NULL;
fp = fopen("c", "w");
if(fp == NULL)
return;
while(1)
{
if((read = getline(&line, &len, stdin)) != -1)
{
if(strcmp(line, "-1\n") == 0)
break;
else
fputs(line, fp); //getline会自动加上一个换行的,所以这里不需要在加换行
}
}
if(line)
free(line);

cout<<"The numbers are:"<<endl;
char buffer[100] = {0};
fclose(fp);
fp = fopen("c", "r");
while(NULL != fgets(buffer, 100, fp))
printf("%s", buffer);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: