Re: [問題] 奇怪的c問題
感謝z大大
我也有想過是因為enter也屬於一個輸入位元的關係
不過我有疑問的地方是
我第二個getchar並不是跟第一個是緊密接在一起的
而是經由一個副函數呼叫返回之後才又回到第二個getchar
so , 如果是按照上面的解釋來說的話
那經由鍵盤輸入並且按下enter之後,這些位元是會先存到某個暫存空間囉
然後再丟給getchar, 然後第一個getchar處理第一個位元
接著副函數返回之後, 第二個getchar經由暫存空間讀到之前所輸入的enter位元.
我有試過假設在第二個getchar之後在加一個getchar , 然後假如我再第一個
getchar的時候是輸入兩個位元再按enter的話 , 那程式的確也會直接結束
並且結束前會輸出我再第一個getchar所輸入的第二個位元.
所以...應該是有一個暫存空間,去供getchar讀取資料吧. 我想
以上
請各位評評理 謝謝
PS:My system is linux system too.
※ 引述《zxvc (zxvc)》之銘言:
: ※ 引述《adddream (哆啦A孟)》之銘言:
: : int main(void)
: : {
: : int fd;
: : fd=open("hello",O_RDWR | O_CREAT, 0666);
: : if(fd<0)
: : {
: : perror("open");
: : exit(1);
: : }
: : lock_set(fd,F_WRLCK);
: : getchar();
: : lock_set(fd,F_UNLCK);
: : getchar();
: : close(fd);
: : exit(0);
: : }
: 你可以試試看這個程式:
: int main(void)
: {
: getchar();
: getchar();
: return 0;
: }
: 可以得到一樣的效果。
: 這是因為getchar()只會讀取一個字元。
: 你如果執行這個程式,輸入一個字元a、『再按Enter』,
: 等於輸入兩個字元,因為按下Enter會輸入一個『newline』。
: 所以第二個getchar就會因為讀到newline而結束。
: 我在Linux上測試是如此,
: 但是好像Windows上『newline』好像佔兩個字元,不清楚,
: 你可以用3個getchar測試看看。
: : 如上程式,理想的情形應該是,在呼叫lock_set(fd,F_WRLCK)完之後,會因為getchar()
: : 而等待輸入,輸入完之後街著呼叫lock_set(fd,F_UNLCK),然後在接著由於getchar()
: : 而等待輸入,然後停止。
: : 但我試驗完之後,發現在呼叫完lock_set(fd,F_UNLCK)之後,程式就停了 =.=。
: : 也就是,第二個getchar()沒有作用。
: : 但若此時,我在第二個getchar()在加入一個getchar()之後,成式就可以等待輸入了。
: : but,只會停一次 =.=。意思是說,第一個getchar()不知道那去了。
: : 請問這是為捨壓 ???
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.70.76.156
※ 編輯: adddream 來自: 203.70.76.156 (03/02 21:56)
推
03/02 22:18, , 1F
03/02 22:18, 1F
→
03/02 22:19, , 2F
03/02 22:19, 2F
討論串 (同標題文章)