callmesb 发表于 2012-6-8 20:59:01

关于C++结束符的一点疑问

关于C++结束符的一点疑问
来自:软院网·中科大 Android客户端

callmesb 发表于 2012-6-8 21:00:31

代码是这个…
int main()
{
        char ch;
        int cnt=0;
        while(cin.get(ch))
        {
                switch(ch)
                {
                case 'a':
                case 'b':
                case 'c':
                case 'd':
                        cnt++;
                }
        }
        cout<<cnt<<endl;
        return 0;
}
问题是退出while循环需要按两次ctrl+z,为什么?求高人解答!
来自:软院网·中科大 Android客户端

callmesb 发表于 2012-6-8 21:09:11

亲们!帮帮忙啊!
来自:软院网·中科大 Android客户端

明月生寒 发表于 2012-6-8 21:19:57

是VC6.0的编译器吗?

wljyy521 发表于 2012-6-8 21:30:34

本帖最后由 wljyy521 于 2012-6-8 22:26 编辑

callmesb 发表于 2012-6-8 21:00 http://www.ruanyuan.net/static/image/common/back.gif
代码是这个…
int main()
{

在VC6中只要按一次ctrl+z就行了啊,就退出了,你是什么编译器?
你为什么不直接用cin>>ch;呢为什么还cin.get(ch);
char ch;
while(cin>>ch) 当执行这一条语句时,如果cin >> ch输入的数据合法那么会返回结果不是零的输入流cin,要cin >> ch返回的结果来进行判断,当cin >>ch 输入合法的数据时,返回的结果非零,否则返回的结果是零,我在VC6中测试了一下,如果你输入ww,那么会把ww当作两个w处理,ctrl+z是可以结束循环的,你在试试,我不知道你的编译器是?
但是我如果是这样的把 char ch----->int ch;那么此时就是必须输入两次ctrl+z才能结束循环

sky 发表于 2012-6-8 21:48:24

while循环是如何退出的?按ctl+z是通过系统中断的方式中断了这个程序么?如果不考虑系统中断,输入ctl+z可以让while循环退出么?switch-case语句是不是有点问题,在每一个分支执行完毕后是不是要考虑break掉,你这样的代码会导致所有分支都被执行到,那么写这个switch-case语句就没有意义了。

callmesb 发表于 2012-6-8 21:50:27

我用的vs2010- -我明天用6.0试试
来自:软院网·中科大 Android客户端

callmesb 发表于 2012-6-8 21:54:34

ctrl+z是中断输入流的…switch-case是ok的- -那题目原来是要统计元音字母数目…我简单写了就仍上了了
来自:软院网·中科大 Android客户端

hslx111 发表于 2012-6-8 23:07:22

感觉像是编译器的问题...

maxOrder石 发表于 2012-6-8 23:33:07

我的VC出了问题,我建议楼主试试调试啊,看看每一步是怎么执行的!这样就可以知道问题是出在哪了

callmesb 发表于 2012-6-9 10:24:45

我承认我不会调试- -!我用6.0一样要2次啊!前面的同学真的用的我的代码么……用cin.get(ch)是为了读入空格,换行什么的
来自:软院网·中科大 Android客户端

callmesb 发表于 2012-6-9 12:48:16

我记得早上明明回了…用6.0一样的情况…楼上的童鞋是用我的代码么…用cin.get(ch)是为了获取空格,换行……
来自:软院网·中科大 Android客户端

poiu9080 发表于 2012-6-10 15:39:27

跟编译器无关
关键的理解点在于ctrl+z产生的不是一个字符
因此不被读入缓冲区中
贴篇文章吧,希望能帮到你

为什么有时候要两次 Ctrl+Z 才能结束输入(转)

页: [1]
查看完整版本: 关于C++结束符的一点疑问