jr9910 发表于 2010-9-3 21:38

这个程序为什么停不住?

我使用VS2008建立了下面一个控制台程序。
// textin1.cpp -- reading chars with a while loop
#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();
    cin.get();
    return 0;
}
程序运行以后,dos那个窗口一闪就没有了,以前有cin的情况使用两个cin.get()函数就能将留在输入队列当中的回车换行去掉,使dos这个界面停留等待回车换行的输入,方便观察运行结果。但是这个程序例外。有人能帮忙看看么?

az9841682 发表于 2010-9-5 06:53

#include <iostream>
using namespace std;
int main()
{
    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();
    cin.get();
    return 0;
}

yijiaoyingbi 发表于 2010-9-7 08:43

我在bcb里运行了下,结果正常

另可以调用system(“pause”),使程序不会立即退出的

jr9910 发表于 2010-9-7 20:40

回复 2楼 az9841682

这个只是将using namespace std移到main函数以外,其实在这个例子当中在main函数以内和以外都是一样的。并没有本质的区别。

[[i] 本帖最后由 jr9910 于 2010-9-7 20:47 编辑 [/i]]

jr9910 发表于 2010-9-7 20:45

回复 3楼 yijiaoyingbi

这个程序并没有任何问题,也应该可以停住,真正的原因我找到了。是测试的问题。因为程序是逐个读入字符的,实际上是回车换行确定以后,程序才开始读入一行输入。这样的话,如果输入是nalgna#langa之类的,就是说#之后还包含一个以上的字符,那么两个cin.get()当然就是不够用了。

童言无忌 发表于 2011-4-11 15:28

在return 0;上面加一句 system(“pause”);即可

页: [1]

编程论坛