C++/C輸入(cin)
對於初學者>>和<<常常搞混,cin是用>>喔!
cin >> 字元變數名稱
- 變數是整數或浮點數型別 : 他會跳過空白,tab字元,僅讀數字部分,一直到非數字字元就停止,在儲存在變數
如果是要讀取字串的話~~
- cin >> 字元陣列名稱 : 這像C的scanf 搭 %s 一樣,以空白、跳格或換行(\n)自元作為字串結束字元
- cin.getline(字元陣列名稱, 字數) : 它的結束自元就只有換行,空白和跳格都會被讀取,讀入的最大字元數是字數減一,只要沒超過範圍字數遇到換行就換行,cin停住,並移除留在輸入緩衝區字元
- cin.get(字元陣列名稱,字數) : 規則同上getline,唯一差別在他不會移除緩衝區的換行字元
很多題目都叫你們輸入時用空白隔開
我這就介紹一下,strtok這個好東西
這是C的用法:
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++切割用法:
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 ) {
(我是程式碼) ;
}
留言列表