我正在參加關於「C」的培訓課程並遇到問題。這很難解釋,所以我會發布代碼。這是訓練語法,所以不要問我爲什麼這樣做。當這兩個段塊都在main()中運行時,第二個塊的行爲不像在main()中單獨存在。我已經嘗試了幾個IDE認爲它可能是一個錯誤。找不到爲什麼getchar()正在爲第一次出現的換行符C
/* First Segment Block */
int c;
printf("Type a letter: ");
c = getchar();
printf("You typed '%c'\n",c);
/* OR - outputs the same, to demonstrate putchar */
printf("You typed '");
putchar(c);
printf("'\n\n");
/* Second Segment Block */
int a,b,d;
printf("Type two letters: ");
a = getchar();
b = getchar();
d = getchar();
printf("You typed '");
putchar(a);
printf("' and '");
putchar(b);
printf("' and '");
putchar(d);
printf("'\n");
在第二部分塊中,我添加了第三個變量來測試我的理論。當你輸入所要求的兩個字母時,第一個getchar()會選擇一個新行,第二個getchar()會選取第一個字母。第三個getchar()拿起第二個字母。如果註釋掉整個第一個段的塊,那麼它的行爲是正確的,第一個getchar()獲取第一個字母,第二個獲取第二個getchar(),顯示輸出。
以下是兩者一起運行時的輸出。
Type a letter: k
You typed (k)
You typed 'k'
Type two letters: lk
You typed '
' and 'l' and 'k'
RUN SUCCESSFUL (total time: 9s)
當它們單獨運行時,輸出如下。
第一部分輸出。
Type a letter: k
You typed (k)
You typed 'k'
RUN SUCCESSFUL (total time: 5s)
第二部分輸出。
Type two letters: rf
You typed 'r' and 'f' and '
'
RUN SUCCESSFUL (total time: 5s)
第3個getchar()是一個換行符,這是預期的。
任何人都可以解釋爲什麼當兩個段運行在同一個主要(),行爲是不同的,當運行分開?
謝謝你在前進, 丹尼爾N.(C語言初學者)
回答完第一個提示後,您是否按回車?該換行符被下一個'getchar()'讀取。 – Barmar
當你輸入第一個字母時,你也會碰到return,它顯示爲一個換行符。第二個'getchar()'讀取換行符,然後讀取兩個字母(輸入中有未讀的換行符)。這是預期的行爲。如果您鍵入'abc'並返回,那麼事情就會像您期望的那樣更加接近......除了額外的'getchar()'調用將會返回而無需您輸入更多內容。 –
換行符(''\ n'')也是'char' .. – chux