您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)怎么更好的進行C++代碼編譯,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
在剛剛剛開始學(xué)C++代碼時遇到一個問題,這個問題導(dǎo)致程序不能夠完全的進行運行,看完本文后對您一定會大有幫助,下文除了學(xué)習(xí)C++代碼的基本性質(zhì)外還對C++代碼的編程進行全面研究。如下代碼:
#include int main() ...{ char a,b; printf("Please input the first character:"); scanf("%c", &a); printf("Please input the second character:"); scanf("%c", &b); printf("The two characters are %c, %c", a, b); return 0; }
程序運行結(jié)果如下:而下面這段程序卻可以正常運行:
運行結(jié)果如下:
#include int main() ...{ char a; int b; printf("Please input the first character:"); scanf("%c", &a); printf("Please input the second integer:"); scanf("%d", &b); printf("The two characters are %c, %d", a, b); return 0; }
當(dāng)時對這個問題很困惑,時間一長就慢慢淡忘了。昨天一個同學(xué)問到一個C++運算符重載的問題,如下代碼,其中的while循環(huán)起什么作用,好像注釋掉后程序運行沒什么差別:
iostream& operator >> (iostream& is, b& s) ...{ char temp[b::MAX] = ...{0}; is.get(); is.get(temp, b::MAX); if(strlen(temp)>0) ...{ strncpy(b.str, temp, b::MAX); } while(is && is.get()!=' ') ...{ continue; } return is; }
果然,當(dāng)輸入字符串小于b::MAX時一切正常,當(dāng)超過b::MAX時,當(dāng)輸入完***個字符串回車后,沒等輸入第二個字符串,程序就把b1和b2的內(nèi)容都顯示出來了,而b2 的內(nèi)容正是輸入的字符串超過b::MAX長度的部分,說明前面的分析是正確的。
今天又想起這個問題,突然聯(lián)想到以前C++語言的兩個scanf連用產(chǎn)生的問題,靈機一動,難道也是輸入緩沖區(qū)沒有自動清空產(chǎn)生的問題?當(dāng)連續(xù)用scanf輸入兩個字符的時候,輸入***個字符后回車。
結(jié)果換行符被當(dāng)作第二個字符輸入了,scanf可不會區(qū)分什么換行符還是普通字符,而當(dāng)輸入一個字符,再輸入一個整數(shù)時,因為類型不匹配的原因,scanf會將換行符忽略而等待輸入正確的整數(shù)后才返回,所以得到了正確的結(jié)果,哈哈,原來如此!!!
可見,C++中的標(biāo)準(zhǔn)輸入流已經(jīng)對于換行符做了處理,看來在C++中利用標(biāo)準(zhǔn)輸入處理特殊字符要自己做一些工作了
上述就是小編為大家分享的怎么更好的進行C++代碼編譯了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。