关于输入输出流的讨论

 今天看了下C++中的流,试着编写了程序如下:

#include <fstream>
#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
   ifstream ii_st;
   ofstream oo_st;
   int fri_data,sec_data,thi_data,i1,i2,i3;
  // char s_data,s3;
   fri_data=111;
   sec_data=222;
   thi_data=333;
   //s_data='a';
   oo_st.open("test.data",ios::app);  ios::app的作用是在已有的数据后追加数据,否则就会重头重写数据
   if(oo_st.fail())
     {
        cout << "the output is fail";
        exit(1);
     }
   oo_st << fri_data << "/n"<< sec_data << "/n" << thi_data <<"/n" ;
   oo_st.close();
   ii_st.open("test.data");
   if (ii_st.fail())
     {
        cout << "the input is fail";
        exit(1);
     }
   ii_st >> i1 >> i2 >> i3;
   cout << i1 << i2 << i3;
   ii_st.close();
}

开始时的程序中向文件中输出数据时用的语句为oo_st << fri_data << sec_data <<  thi_data ;既没有换行符,运行的结果如下111222-1073749412,并且最后五位每次运行后的结果都不一样,在向如上程序那样输入每行后加入换行符后,即可输出正确结果。

原因在于从文件中读入数据和从键盘中读入数据的原理是一样的,即要让计算机知道每个数据在什么时候结束。程序在从键盘中读数据的时候几个不同的数据之间要用分隔符分离,如空格,Tab和换行符等,因此在从文件中读入数据的时候,文件中的数据也要有明确的分隔符分离。如果输入和输出是同一个文件就要求输入文件数据数据的时候数据之间要有分隔符。

你可能感兴趣的:(关于输入输出流的讨论)