c 問題為什麼執行結果是這樣呢

2021-05-02 12:10:52 字數 1231 閱讀 7635

1樓:莊政警

一步步來:

cin>>buffer;  // 這個碰到空白(回車,空格,tab)就停止讀取,buffer就只讀到"i"這一個字元,剩下的" study opp\n"留在輸入緩衝區

cout

//因為緩衝區字元不到20個並且沒有結束符'/',所以能再次輸入"i study opp",輸入後緩衝區裡是" study opp\ni study opp\n",因為沒有碰到'/',就讀取19個字元到buffer,再加一個'\0'

cout

'\0' (流物件的getline方法如果讀取到最大允許單位(就是第二個引數值)還沒有讀取到結束符,就會把流物件標記為異常,再不接受輸入)

這就是你碰到的狀況

把cin修好再試試:

char buffer[60];

cin>>buffer;

cout<

2樓:

這個結果很正常!cin >> buffer;這種語句遇到空格(包括\n、\t等)就認為輸入結束了,前面的輸入有效,所以由於i後是空格,那buffer就只接收了一個i。這時輸入緩衝區裡只剩下 study opp\n了(注意最前面還有個空格),第二個cin.

getline(buffer,20,'/');要求輸入19個字元或以'/'結束,因為第一次輸入的後剩下的 study opp不夠19個字元就等待再輸入;你又輸入了i study opp\n,它在輸入緩衝區裡排在前面剩下的 study opp後面成為 study opp\ni study opp\n,那麼第二個cin.getline(buffer,20,'/');因為在前19個字元中沒有遇到'/'就只好接收19個字元即 study opp\ni study 而結束,所以第二次輸出就是" study opp換行i study "(注意前後都有個空格且'換行'佔1字元)。第三次為什麼什麼都沒有輸出?

因為cin.getline(buffer,20,'/');這種寫法是先在一行中檢測有沒有'/',由於沒有找到'/',輸入緩衝區裡的字元都被遍歷了,認為沒有字元了,所以沒有輸出——可以把第二次輸入改為i study/opp\n,讓在20個字元中能測到'/'就可以輸出最後的opp——不過這到底是不是getline函式的bug,我也不清楚。供參考。

c程式執行結果是

下面三句有問題 case 0 printf break case 1 printf break case 2 printf break 改為 case 0 printf break case 1 printf break case 2 printf break 執行結果 第一次錯誤是死迴圈和除數為0...

C語言下面程式的執行結果是

沒有印錯 語句的意思是這兩分句是一條語句 都要執行 它的形式相當於加個括號 x y 0 while x 15 printf d,d y,x 程式是這樣執行的 第一次判斷x 15 y 變成1 後面的語句x y 優先順序比 高 所以y先自加 變成2 x再加y值變成2 所以第一次迴圈完 x 2 y 2 執...

下面這段C語言程式的執行結果是多少呢?能不能給我詳細解釋一下??感激不盡

int 4位元組 兩個char 2位元組 以16進製表示一個 int 每個xx表示一位元組 就是xx xx xx xx 低址 高址 那麼兩個char就是前兩個xx 程式裡就是 0a 01 00 00 作為int的值就是 0x0000010a 換算成10進位制吧 char型別是一個位元組,int型別是...