close
C++/C輸入(cin)
對於初學者>>和<<常常搞混,cin是用>>喔!
 
cin >> 字元變數名稱
 
  • 變數是整數或浮點數型別 : 他會跳過空白,tab字元,僅讀數字部分,一直到非數字字元就停止,在儲存在變數
 
如果是要讀取字串的話~~
 
  • cin >> 字元陣列名稱 : 這像C的scanf 搭 %s 一樣,以空白、跳格或換行(\n)自元作為字串結束字元
 
  • cin.getline(字元陣列名稱, 字數) : 它的結束自元就只有換行,空白和跳格都會被讀取,讀入的最大字元數是字數減一,只要沒超過範圍字數遇到換行就換行,cin停住,並移除留在輸入緩衝區字元
 
  • cin.get(字元陣列名稱,字數) : 規則同上getline,唯一差別在他不會移除緩衝區的換行字元
 
很多題目都叫你們輸入時用空白隔開
我這就介紹一下,strtok這個好東西
 
這是C的用法:
#include <iostream>
#include <stdio.h> //一定要
#include <string.h> //一定要
using namespace std;
int main( )
{
  char str[80]; //剛開始放你要輸入的字串(有空白隔開)
  char delim[] = " "; //這是用來隔開的東西,我們是這次是空白
  char * pch;  //他是切好的東西
  gets(str);
  pch = strtok(str, delim); 他是把刀子,負責切str裡的字串,每看到空白補一刀
  while (pch != NULL) //只要刀子沒看到最後一個,就繼續切
  {
     printf("%s\n", pch);  //1 ,2 ,3 ,str ,a ,pp ,le
     pch = strtok(NULL, delim); //而這個事幹嘛呢,之後補充
  }
}
 
補充的那個解釋比較麻煩,我這有相關網站請用==>我要看看
看完後,你在說啥咪,麻~~對於新手就把這個記起來就可以了~~
 
C++切割用法:
#include <iostream>
#include <sstream> //一定要
#include <string.h> //一定要
using namespace std;
int main( )
{
  string str;
  getline(cin,str);
  stringstream delim(str); 
  string pch;
  while(getline(delim,pch,' '))
  {
      cout << pch << endl;
  }
}
getline( 來源(字串delim) , 切完存入的地方(pch) , 切割條件(這題是用空白)  )
stringstream 他都用來做字串用的轉換工具====>我想看看他是誰
 
再來是遇到輸入多筆資料呢?
請看~~
 
第一種是用 gets 
    gets每次會讀一列 
    若讀不到input會回傳NULL 
    因此code可以這樣寫 
    char data[100]; 
    //如果用C++建議宣, string data;
    while( gets(data) != NULL或者是(cin>>data)!=NULL ) { 
        (我是程式碼)    ; 
    } 
第二種是用 scanf 
    scanf在讀不到input會回傳EOF (End of File的縮寫) 
    若你知道該列變數個數 
    則code可以這樣寫 
    int a, b, c; 
    while( scanf("%d %d %d", &a, &b, &c) != EOF ) { 
           (我是程式碼)    ; 
    } 
arrow
arrow
    全站熱搜

    佑佑 發表在 痞客邦 留言(0) 人氣()