1. 程式人生 > >C++中的字符串輸入輸出函數詳解

C++中的字符串輸入輸出函數詳解

c++ 這樣的 個數字 scan 保存 使用 收回 一次 用法

常見的輸入問題:
1、直接用cin輸入(當然可以使用cout直接輸出):
  1)string s;
    cin >> s; //只接收回車鍵和空格前面所輸入的字符!!!!!
    一旦輸入空格,cin將空格視為回車鍵,將會將後面的字符賦予後續有輸入cin函數的變量中,如下面的a,故一定確保輸入無空格!!
  2)char a[10];
    cin >> a; //同樣,只接收回車鍵和空格前面所輸入的字符!!!!!
    一旦輸入空格,cin將空格視為回車鍵,將會將後面的字符賦予後續有輸入cin函數的變量中,如下面的a,故一定確保輸入無空格!!

    同樣:(以下情況是一樣的)
      char *b =a;
      cin >> b;

2、使用空格為間隔輸入多個數字或字符(與scanf功能一樣)
  1)int a,b,c;
    cin >>a>>b>>c; //可以直接輸入a,b,c的值,中間用空格[n個也行]或者回車鍵間隔都可以!!!
  2)
    char a, b;
    cin>>a>>b; //可以直接輸入a,b的值,中間用空格[n個也行]或者回車鍵間隔都可以!!!但無法將空格字符賦予a,b

輸入函數
  string str/line;

1)cin
  cin >> line
    //遇到回車鍵停止輸入,按空格輸出,
  空格、回車等會被丟棄(這些還在緩沖區中,下次若用cin會自動丟棄),下次又會讀取流中剩下的內容。(對於要輸入一個字符串如果用cin>>input;這樣的方法來輸入一個字符串,則遇到空白換行,制表之類的,輸入都會停止)因為從流中讀入數據保存到string中,string會遇到空格就停止錄入。這樣當我們輸入一行帶空格的字符串,就要考慮getline函數,從流中讀入一行字符串.


2)getline
  string line;

  getline(cin,line);//按回車鍵結束輸入
  getline(cin,line,‘#‘);
    //輸入一串字符(不管多少個回車鍵),只要是在‘#’號之 前的字符都會讀取並保存

  get與getline區別不是很大,但一個明顯的區別是get遇到‘\n ‘字符後便返回,這時 ‘\n ‘還在緩沖區中,所以下次讀出來的將是 ‘\n ‘,而getline遇到‘\n ‘也返回,但它會把 ‘\n ‘從緩沖區裏移除掉,所以很多時候用getline方便些。

3)cin.get()
  用法1: cin.get(字符變量名)可以用來接收字符
    char ch;
    ch = cin.get(); //只接受一個字符


  用法2:cin.get(字符數組名,接收字符數目)用來接收一行字符串,可以接收空格
    char a[20];
    cin.get(a,20);


  註意:
    cin.get()會將回車鍵存儲在緩存中,若後面還有cin.get()函數,則該函數會將緩存中的回車鍵取出並賦予後面的輸入變量中,故,使用了cin.get()函數就一定後面要加getchar(),將回車鍵讀取並丟棄!!!!!!!!!

4)cin.getline()
  //接受一個字符串可以接受空格並輸出
  char m[20];
  cin.getline(m,5);
  輸入:jkjkjkjkkjkjkjkj
  輸出:jklj //第5個字符默認添加‘\0‘

5)gets()【c++11已棄用!!!】
  //接受一個字符,可以接受空格並輸出,需包含頭文件#include<string>
  char ch;
  gets(ch);

3)getchar()
  getchar()是stdio.h中的庫函數,它的作用是從stdin流中讀入一個字符,也就是說,如果stdin有數據的話不用輸入它就可以直接讀取了,第一次getchar()時,確實需要人工的輸入,但是如果你輸了多個字符,以後的getchar()再執行時就會直接從緩沖區中讀取了。
故一般用getchar()來清除緩存中的字符

4)輸入強行退出
Ctrl + Z 或輸入EOF再按回車鍵

C++中的字符串輸入輸出函數詳解