[技术| 编程·课件·Linux] 关于C++结束符的一点疑问

callmesb · 发布于 2012-06-08 20:59 · 2389 次阅读
390
关于C++结束符的一点疑问
来自:软院网·中科大 Android客户端来自: Android客户端
共收到 12 条回复
callmesb · #2 · 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客户端来自: Android客户端

点评

在VC6中只要按一次ctrl+z就行了啊,就退出了,你是什么编译器?  详情 回复 发表于 2012-6-8 21:30
callmesb · #3 · 2012-6-8 21:09:11  回复 支持 反对
亲们!帮帮忙啊!
来自:软院网·中科大 Android客户端来自: Android客户端
明月生寒 · #4 · 2012-6-8 21:19:57  回复 支持 反对
是VC6.0的编译器吗?
wljyy521 · #5 · 2012-6-8 21:30:34  回复 支持 反对
本帖最后由 wljyy521 于 2012-6-8 22:26 编辑
callmesb 发表于 2012-6-8 21:00
代码是这个…
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 · #6 · 2012-6-8 21:48:24  回复 支持 反对
while循环是如何退出的?按ctl+z是通过系统中断的方式中断了这个程序么?如果不考虑系统中断,输入ctl+z可以让while循环退出么?switch-case语句是不是有点问题,在每一个分支执行完毕后是不是要考虑break掉,你这样的代码会导致所有分支都被执行到,那么写这个switch-case语句就没有意义了。
callmesb · #7 · 2012-6-8 21:50:27  回复 支持 反对
我用的vs2010- -我明天用6.0试试
来自:软院网·中科大 Android客户端来自: Android客户端
callmesb · #8 · 2012-6-8 21:54:34  回复 支持 反对
ctrl+z是中断输入流的…switch-case是ok的- -那题目原来是要统计元音字母数目…我简单写了就仍上了了
来自:软院网·中科大 Android客户端来自: Android客户端
hslx111 · #9 · 2012-6-8 23:07:22  回复 支持 反对
感觉像是编译器的问题...
maxOrder石 · #10 · 2012-6-8 23:33:07  回复 支持 反对
我的VC出了问题,我建议楼主试试调试啊,看看每一步是怎么执行的!这样就可以知道问题是出在哪了
callmesb · #11 · 2012-6-9 10:24:45  回复 支持 反对
我承认我不会调试- -!我用6.0一样要2次啊!前面的同学真的用的我的代码么……用cin.get(ch)是为了读入空格,换行什么的
来自:软院网·中科大 Android客户端来自: Android客户端
callmesb · #12 · 2012-6-9 12:48:16  回复 支持 反对
我记得早上明明回了…用6.0一样的情况…楼上的童鞋是用我的代码么…用cin.get(ch)是为了获取空格,换行……
来自:软院网·中科大 Android客户端来自: Android客户端
poiu9080 · #13 · 2012-6-10 15:39:27  回复 支持 反对
跟编译器无关
关键的理解点在于ctrl+z产生的不是一个字符
因此不被读入缓冲区中
贴篇文章吧,希望能帮到你

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

回帖
B Color Image Link Quote Code Smilies
Command + Enter
快速回复 返回顶部 返回列表