题目:键盘输入一系列数字(-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);
}