1.關於PAT中段錯誤
使用字符數組出現錯誤:
char str[256];
報錯段錯誤,然后改用C++中的string
改成:
string str;
同char數組一樣,也可以使用下標來取單個字符
但是還有區別就是,判斷字符長度
char str[256],使用int len = strlen(str);
string str,使用int len = str.length();
2.關於輸入cin、cin.get()、cin.getline()、getline()使用
前言
在做PATB1033 舊鍵盤打字(20分)時,有一個答案錯誤一直沒有解決
只拿了19分,百思不得其解
然后我把cin >> str;換成getline(cin, str);問題解決
cin.getline()和getline()是兩回事。
cin.getline()是在#include
而getline(cin,str)用法:接收一個字符串,可以接收空格並輸出,需包含“#include
1. cin
結束條件:[enter],[space],[tab]
處理方法:cin遇到緩沖區中的[enter],[space],[tab]會結束當前輸入,
並舍棄[enter],[space],[tab],繼續下一項輸入,
當有連續[space],[enter,[tab]會全部舍棄。
2. cin.get()
用法1: a = cin.get()或者cin.get(a)
結束條件:輸入字符足夠后,回車,意思是只有當滿足輸入條件后的字符數,
然后回車才會結束。[enter],[space],[tab]不會被舍棄。
說明:這個是單字符的輸入,用途是輸入一個字符,把它的ASCALL碼存入到a中
用法2:cin.get(arrayname,size) 把字符輸入到arrayname中,長度不超過size
注釋:arrayname必須是char[]類型,即char數組類型,不可以為string類型;size是指輸入長度,即允許輸入的最大長度。
處理方法:假設把數據輸入到 char a[arraylength],數組長度為arraylength。cin.get(a,size)---size,arraylength不同可以分為四類:
用法3:用法:cin.get(arrayname,size,s) 把數據輸入到arrayname字符數組中,當到達長度size時結束或者遇到字符s時結束
注釋:a必須是字符數組,即char a[]l類型,不可為string類型;size為最大的輸入長度;s為控制,遇到s則當前輸入結束緩存區里的s將被舍棄
#include<iostream>
using namespace std;
int main(){
int i;
char a[10];
cin.get(a,10,'.');
cout<<a;
}
3. cin.getline()
cin.getline()的用法和cin.get()用法大致相同,沒有一參數用法,只有二參數,三參數兩類
cin.gerline(arrayname,size)
cin.getline(arrayname,size,s)用法與cin.get()效果大致相同,但也有些區別
(1)cin.getline(arrayname,size)與cin.get(arrayname,size)的區別
cin.get(arrayname,size)當遇到[enter]時會結束目前輸入,他不會刪除緩沖區中的[enter]
cin.getline(arrayname,size)當遇到[enter]時會結束當前輸入,但是會刪除緩沖區中的[enter]
4. getline(cin,str)
用法:接收一個字符串,可以接收空格並輸出,需包含“#include
#include<iostream>
#include<string>
using namespace std;
main (){
string str;
getline(cin,str);
cout<<str<<endl;
}
5. 注意的問題
1、cin.getline()屬於istream流,而getline()屬於string流,是不一樣的兩個函數
2、當同時使用cin>>,getline()時,需要注意的是,在cin>>輸入流完成之后,getline()之前,需要通過
str="\n";
getline(cin,str);
的方式將回車符作為輸入流cin以清除緩存,如果不這樣做的話,在控制台上就不會出現getline()的輸入提示,而直接跳過,因為程序默認地將之前的變量作為輸入流。