返回信息流(在题目里写,太长了,呵呵)必须要回车,代表结束输入,然后在新行里ctrl+z,回车才能结束输入。求教这是为什么?
示例程序:
#include <stdio.h>
main()
{
int c,nc,i; //c the input character,nc the number of a input word
int w[20]; // the array to contain the numbers of input words,set 20 as the biggest character number of a word.
nc = 0;
for( i = 0; i <= 19; i++)
{
w[i] = 0;
}
while((c = getchar()) != EOF)
{
if(c == ' ' || c == '\t' || c == '\n')
{ if (nc == 0)
;
else
{
++w[nc];
nc = 0;
}
}
else ++nc;
}
for( i = 1; i<=19;i++)
printf(" %d",w[i]);
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #32797同步于 2009/12/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
大家在用c时遇没遇到过ctrl+z然后回车并不能结束字符输入,必须
pigg
2009/12/6镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
没大看懂楼主的意思
但是你的循环终止条件不是
while((c = getchar()) != EOF) 吗
而且里面没有break语句,也就是说必须读到结束符才行
其实你读入的字符串(好多字符),如果不敲回车的话,在键盘缓冲区足够使用的情况下,这些字符是不会传递给程序的,只有敲了一个回车才发出信号将读入的东西从键盘送出去
至于ctrl+z结束输入,这个可能和系统有关系,我只知道ctrl+d可以,而且不用再敲回车
能再清楚的说下这个问题就好了,没大看懂
【 在 pigg 的大作中提到: 】
: (在题目里写,太长了,呵呵)必须要回车,代表结束输入,然后在新行里ctrl+z,回车才能结束输入。求教这是为什么?
: 示例程序:
: #include <stdio.h>
: ...................
“其实你读入的字符串(好多字符),如果不敲回车的话,在键盘缓冲区足够使用的情况下,这些字符是不会传递给程序的,只有敲了一个回车才发出信号将读入的东西从键盘送出去 ”
嗯,你说的很明白。
什么是行缓冲?
【 在 pigg 的大作中提到: 】
: “其实你读入的字符串(好多字符),如果不敲回车的话,在键盘缓冲区足够使用的情况下,这些字符是不会传递给程序的,只有敲了一个回车才发出信号将读入的东西从键盘送出去 ”
: 嗯,你说的很明白。
: 什么是行缓冲?
行缓冲就是按按行缓冲 = =!
其实就是系统不断的接受输入的字符到缓冲区,直到遇到一个换行符才会把缓冲区传回中断处理程序中