作者adddream (哆啦A孟)
站内Electronics
标题Re: [问题] 奇怪的c问题
时间Fri Mar 2 21:55:39 2007
感谢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)
1F:推 zxvc:对,你输入的字串会被放在记忆体中的缓冲区.如果某个getchar 03/02 22:18
2F:→ zxvc:没有把缓冲区的资料读完,就由下一个getchar去读. 03/02 22:19