注册 登录
编程论坛 C++教室

我是c++新手,下面C++代码运行时,为什么会闪退? 我用的是vs2017编译器

yq1557 发布于 2018-02-24 10:17, 1806 次点击
#include <iostream>
int main()
{
    using namespace std;
    char ch;
    int count = 0;      
    cout << "Enter characters; enter # to quit:\n";
    cin >> ch;         
    while (ch != '#')  
    {
        cout << ch;     
        ++count;      
        cin >> ch;      
    }
    cout << endl << count << " characters read\n";
    cin.get();
    return 0;
}
为什么当我输入“hello world how are you#”可以正常运行显示;
但当我这样输入时却总是闪退“hello world#how are you”;
#后边有字符或空格闪退;
教科书上说这样输入是可以的,程序在遇到#字符将结束对输入的处理;
但我的总是闪退,怎么回事?

[此贴子已经被作者于2018-2-24 10:46编辑过]

1 回复
#2
rjsp2018-02-24 12:02
还是先回答你的问题吧,如果#之后没有输入,那么cin.get()就一直在等待你输入,程序傻等在这里;如果#之后有输入,那cin.get()就执行完毕了,优雅地退出(也就是你所谓的“闪退”)。

-------------------

首先呐,用“cin.get()”等来留住控制台,是外行们的恶心做法。程序运行完毕,就应该即时退出(也就是你所谓的“闪退”)。

以windows为例,如果你想看程序的屏幕输出,那么应该执行 cmd.exe /k a.exe,程序运行结束后控制台还在。或者先打开cmd.exe,然后在cmd.exe中运行a.exe。
如果你不想看屏幕输出,而只是运行一下程序,那么应该执行 cmd.exe /c a.exe。或者在文件管理器中双击a.exe。

以vc++为例,如果你只是想程序结果,按CTRL+F5,程序运行完毕后控制台还在,再按任意键退出
如果你是想调试,按F5,程序运行后控制台自动退出。

其次说代码,两处 cin >> ch; 你不觉得多余吗?循环中使用的ch你定义在外部不觉得污染环境吗?……
程序代码:
#include <iostream>
using namespace std;

int main( void )
{
    size_t count = 0;

    cout << "Enter characters; enter # to quit:\n";
    for( char ch; cin>>ch && ch!='#'; ++count )
        cout << ch;

    cout << '\n' << count << " characters read\n";
    return 0;
}
1