C++输入输出操作

    • 1.  C++保留C的输入输出单个字符的函数

        (1)  putchar(c)  —— 字符输出

         例程:

      #include<iostream>

       using namespace std;

       int main()

       {

          char a,b,c;

          a='B'; b='O';c='Y';

          putchar(a); putchar(b); putchar(c);putchar('/n');

          putchar(66);putchar(79);putchar(89);putchar(10);    //10是换行的ASCII码

          return 0;

       }

       

        (2) getchar()  ——字符输入函数

        例程:

        #include<iostream>

        using namespace std;

       int main()

       {

         char c;

         c=getchar();

         putchar(c+32);   //转化为小写字母,大小写之间包括[ / ] ^ - 、6个字符,因此不加26加32。'A'=65

         putchar('/n');

         return  0;

       }

       

        也可用cout来输出: cout<<(c=getchar()+32);

       

      2. scanf()、printf()函数的输入和输出

       

          scanf(格式控制,输出表列);

          printf(格式控制,输出表列);

        例程:

         #include<iostream>

        using namespace std;

       int main()

       {

           int a;

           float b;

           char c;

           scanf("%d % c % f", &a,&c,&b);

           printf("a=%d, b=%f, c=%c /n",a,b,c);

           return 0;

      }

       

       

      3. 标准输入输出流cin、cout

         包括头文件#include<iostream>

         输入输出流的控制符要加入头文件 #include<iomanip>

         cout<<"dec:"<<dec<<a<<endl;    //以十进制的形式输出整数

       

         cout.put(97);  //显示a字符--使用cout的成员函数put(c)

       

          cin成员函数get()

          (1)  不带参数的

             char c=cin.get();  //用cin的成员函数get()从键盘读入一个字符到c中去

          (2)  带一个参数的

             cin.get(ch); //从输入的流中接受一个字符,并赋给字符变量ch

          (3) 带三个参数的

             cin.get(字符数组,字符的个数n,终止字符)

             例程:

            #include<iostream>

            using namespace std;

            int main()

           {

                char ch[20];

                cout<<"in put a string:"<<endl;

                cin.get(ch,10,'/n');  /*取得输入流的前10-1=9个字符赋值给ch数组的前9个元素,并规定换行符为为输入流的终止结束符*/

                cout<<ch<<endl;

               return 0;

           }

          如输入:1 2 34567890   //按换行键终止流输入

          则输出:1 2 34567         //只读得前9个送入ch数组中

       

          cin的成员函数getline()  ——从输入流中读入一行字符

             cin.getline(字符数组(或字符指针),字符的个数n,终止字符)

           例程:

            #include<iostream>

            using namespace std;

            int main()

           {

               char ch[20];

               cout<<"input a string:"<<endl;

              cin>>ch;

              cout<<"The string read with cin is:"<<ch<<endl;

              cin.getline(ch,20,'/');      //读取19个字符到ch数组或遇到'/'结束

              cout<<"The second part is:"<<ch<<endl;

              cin.getline(ch,20);          //读取19个字符到ch数组或遇到'/n'结束,遇到'/'仍作为字符读入

              cout<<"The third part is:"<<ch<<endl;

              return 0;

           }

       

           istream类的其他的成员函数如:eof(),在输入流中读取数据,如果到达末尾(遇到文件结束符),则eof()返回真,否则为假.

             例程:

             #include<iostream>

             using namespace std;

            int main()

            {

                char c;

                while(!cin.eof())            //若未遇到文件结束符

                      if((c=cin,get())!=' ')  //检查读入的字符是否为空格字符

                          cout.put(c);

                return 0;

            }

       

      4. 磁盘文件的打开和关闭

           打开

           ofstream outfile;

            if(outfile.open("f1.data",ios::app)==0)    // 打开

                  cout<<"打开失败!";

               ……………………

            outfile.close();                                          //关闭 

       

       

       

      5. 文件写入

      #include <fstream>
      #include 
      <iostream> 

      #include <string>        //一定不能少了,否则报错 error C2679
      using namespace std;

      int main()

      {
         string str;
         ofstream 
      out("d.txt",ios::out);       //等价于ofstream out("d.txt")   

         if(!out)              //若打开失败,out返回0值

        {

            cerr<<"打开失败!"<<endl;

            exit(0);

         }
         str
      ="床前明月光/n疑是地上霜/n举头望明月/n低头思故乡/n";
         out<<str<<endl;
         return 0;   
      }

      6. 读文件到控制台

      #include <fstream>
      #include <iostream> 
      #include<string>
      using namespace std;
      int main()

      {
          ifstream infile("d://new//d.txt",ios::in); //定义输入文件的流对象,以输入方式打开磁盘文件d.txt,第二个参数可去
         if(!infile)
          {
              cerr<<"打开失败!"<<endl;
              exit(1);
          }
         for(string str;getline(infile,str);)  //逐行打开并逐行显示,因此在循环中实现
           cout<<str<<"/n";
           infile.close();
        return 0;    
      }

            或把    for(string str;getline(in,str);)
                      cout<<str<<"/n";

       两句改为   string str;
                      while(getline(in,str))
                             cout<<str<<"/n";

      7. 文件复制

      #include <fstream>
      #include <iostream> 
      #include <string>
      using namespace std;
      int main() 
      {
        ifstream in("d.txt");
        if(!in)
        {
           cerr<<"打开源文件失败!"<<endl;
           exit(1);
        }
        ofstream out("b.txt");
        if(!out)
        {
           cerr<<"打开目的文件失败!"<<endl;
           exit(1);
        }
        for(string str;getline(in,str);)
        out<<str<<endl;                   //注意是out
        cout<<"文件复制成功!"<<endl;

        in.close();

        out.close();
        return 0;    
      }

       
      8. 自定义一个文件读入的函数 void display( char *filename)

       

      #include <fstream>
      #include <iostream> 
      #include <string>
      using namespace std;
      void display(char *filename)
      {
          ifstream infile(filename,ios::in);
          if(!infile)
         {
            cerr<<"打开失败!"<<endl;
            exit(1);
         }
         char ch;
         while(infile.get(ch))
         cout.put(ch);
         cout<<endl;
         infile.close();
      }

      int main() 
      {
        display("d.txt");
        return 0;    
      }

       

      9.关于文件读写的综合应用

       

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

      //从键盘读入字母并存入文件“d.txt”中
      void save_to_file()
      {
        ofstream ofile("d.txt");
        if(!ofile)
        {
         cerr<<"打开失败d.txt!"<<endl;
         exit(1);
        }
        char c[80];
        cin.getline(c,80);         //从键盘逐个读入一行字符
        for(int i=0;c[i]!=0;i++)   //对字符逐个处理,知道遇到'/n'结束
         if(c[i]>=65 && c[i]<=90||c[i]>=97 && c[i]<=122)
         {
          ofile.put(c[i]);   //将字母存入磁盘文件d.txt
          cout<<c[i];
         }
         cout<<endl;
         ofile.close();
      }

      //将"d.txt"中的字母转化为大写字母并存入"out.txt"中
      void get_from_file()
      {
         char ch;
         ifstream infile("d.txt");
         if(!infile)
         {
          cerr<<"打开失败d.txt!"<<endl;
          exit(1);
         }
         ofstream outfile("out.txt");
         if(!infile)
        {
         cerr<<"打开失败out.txt!"<<endl;
         exit(1);
        }

        while(infile.get(ch))  //逐个读入字符成功后执行下面的语句
        {
         if(ch>=97 &&ch<=122)
         ch=ch-32;
         outfile.put(ch);
         cout<<ch;
        }
        cout<<endl;
        infile.close();
        outfile.close();
      }

      int main()
      {
        save_to_file();
        get_from_file();
        return 0;
      }

       

       

       

       

       

       

       

      =========================== C/C++的字符或字符数组的读入函数总结=====================

       

      1、cin
      1、cin.get()
      2、cin.getline()
      3、getline()
      4、gets()
      5、getchar()

      1、cin>>         

      用法1:最基本,也是最常用的用法,输入一个数字:

      #include <iostream>
      using namespace std;
      main ()
      {
      int a,b;
      cin>>a>>b;
      cout<<a+b<<endl;
      }

      输入:2[回车]3[回车]
      输出:5

      用法2:接受一个字符串,遇“空格”、“TAB”、“回车”都结束

      #include <iostream>
      using namespace std;
      main ()
      {
      char a[20];
      cin>>a;
      cout<<a<<endl;
      }

      输入:jkljkljkl
      输出:jkljkljkl

      输入:jkljkl jkljkl       //遇空格结束
      输出:jkljkl

      2、cin.get()

      用法1: cin.get(字符变量名)可以用来接收字符

      #include <iostream>
      using namespace std;
      main ()
      {
      char ch;
      ch=cin.get();               //或者cin.get(ch);
      cout<<ch<<endl;
      }

      输入:jljkljkl
      输出:j

      用法2:cin.get(字符数组名,接收字符数目)用来接收一行字符串,可以接收空格

      #include <iostream>
      using namespace std;
      main ()
      {
      char a[20];
      cin.get(a,20);
      cout<<a<<endl;
      }

      输入:jkl jkl jkl
      输出:jkl jkl jkl

      输入:abcdeabcdeabcdeabcdeabcde (输入25个字符)
      输出:abcdeabcdeabcdeabcd              (接收19个字符+1个'/0')

      3、cin.getline()   // 接受一个字符串,可以接收空格并输出

      getline 会将换行符替换为空字符

      #include <iostream>
      using namespace std;
      main ()
      {
      char m[20];
      cin.getline(m,5);
      cout<<m<<endl;
      }

      输入:jkljkljkl
      输出:jklj

      接受5个字符到m中,其中最后一个为'/0',所以只看到4个字符输出;

      如果把5改成20:
      输入:jkljkljkl
      输出:jkljkljkl

      输入:jklf fjlsjf fjsdklf
      输出:jklf fjlsjf fjsdklf

      //延伸:
      //cin.getline()实际上有三个参数,cin.getline(接受字符串的看哦那间m,接受个数5,结束字符)
      //当第三个参数省略时,系统默认为'/0'
      //如果将例子中cin.getline()改为cin.getline(m,5,'a');当输入jlkjkljkl时输出jklj,输入jkaljkljkl时,输出jk

      当用在多维数组中的时候,也可以用cin.getline(m[i],20)之类的用法:

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

      main ()
      {
      char m[3][20];
      for(int i=0;i<3;i++)
      {
      cout<<"/n请输入第"<<i+1<<"个字符串:"<<endl;
      cin.getline(m[i],20);
      }

      cout<<endl;
      for(int j=0;j<3;j++)
      cout<<"输出m["<<j<<"]的值:"<<m[j]<<endl;

      }

      请输入第1个字符串:
      kskr1

      请输入第2个字符串:
      kskr2

      请输入第3个字符串:
      kskr3

      输出m[0]的值:kskr1
      输出m[1]的值:kskr2
      输出m[2]的值:kskr3

      4、getline()     // 接受一个字符串,可以接收空格并输出,需包含“#include<string>”

      #include<iostream>
      #include<string>
      using namespace std;
      main ()
      {
      string str;
      getline(cin,str);
      cout<<str<<endl;
      }

      输入:jkljkljkl
      输出:jkljkljkl

      输入:jkl jfksldfj jklsjfl
      输出:jkl jfksldfj jklsjfl

      和cin.getline()类似,但是cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数

      5、gets()        // 接受一个字符串,可以接收空格并输出,需包含“#include<string>”

      #include<iostream>
      #include<string>
      using namespace std;
      main ()
      {
      char m[20];
      gets(m);                       //不能写成m=gets();
      cout<<m<<endl;
      }

      输入:jkljkljkl
      输出:jkljkljkl

      输入:jkl jkl jkl
      输出:jkl jkl jkl

      类似cin.getline()里面的一个例子,gets()同样可以用在多维数组里面:

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

      main ()
      {
      char m[3][20];
      for(int i=0;i<3;i++)
      {
      cout<<"/n请输入第"<<i+1<<"个字符串:"<<endl;
      gets(m[i]);
      }

      cout<<endl;
      for(int j=0;j<3;j++)
      cout<<"输出m["<<j<<"]的值:"<<m[j]<<endl;

      }

      请输入第1个字符串:
      kskr1

      请输入第2个字符串:
      kskr2

      请输入第3个字符串:
      kskr3

      输出m[0]的值:kskr1
      输出m[1]的值:kskr2
      输出m[2]的值:kskr3

      自我感觉gets()和cin.getline()的用法很类似,只不过cin.getline()多一个参数罢了;

      这里顺带说明一下,对于本文中的这个kskr1,kskr2,kskr3的例子,对于cin>>也可以适用,原因是这里输入的没有空格,如果输入了空格,比如“ks kr jkl[回车]”那么cin就会已经接收到3个字符串,“ks,kr,jkl”;再如“kskr 1[回车]kskr 2[回车]”,那么则接收“kskr,1,kskr”;这不是我们所要的结果!而cin.getline()和gets()因为可以接收空格,所以不会产生这个错误;

      6、getchar()   //接受一个字符,需包含“#include<string>”

      #include<iostream>
      #include<string>
      using namespace std;
      main ()
      {
      char ch;
      ch=getchar();                        //不能写成getchar(ch);
      cout<<ch<<endl;
      }

      输入:jkljkljkl
      输出:j

      //getchar()是C语言的函数,C++也可以兼容,但是尽量不用或少用;

       

      总结:

      1.读入一行

      gets(char a[]);               //接受一行,遇回车结束

               gets(m[i])     //可用于多维数组中

      cin.get(char a[],int 5,'/n') //将字符数组a的前5个字符读入,遇到换行符结束;比如:a bc12ds,将会读入4个字符 a bc,外加一个'/0';

                                              // 一般第三个参数不写,默认为'/0'

       

               eg:

      #include <iostream>
      #include <string>
      using namespace std;
      main ()
      {
      string str;
      getline(cin,str);
      cout<<str<<endl;
      }

        

      2.读入一个字符

      getchar()   //接受一个字符,需包含“#include<string>”

             char ch =getchar();

      cin.get(char c) 或者 cin.get()

            char ch=cin.get();  或者cin.get(ch)

       

       

                    getline()和cin.getline()类似,但是cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数

       

      cin.getline(char a[],int 5,'/n') //将字符数组a的前5个字符读入,遇换行符结束;如:a bc12ds,将会读入4个字符 a bc,外加一个'/0';

                                              // 一般第三个参数不写,默认为'/0'

               cin.getline(m[i],20) //可用于多维数组中

      getline()     // 接受一个字符串,可以接收空格并输出,需包含“#include<string>"

       

       

 

posted on 2013-02-15 23:37  Zachary_wiz  阅读(470)  评论(0编辑  收藏  举报

导航