【问题标题】:Why does my program immediately terminate after execution为什么我的程序执行后立即终止
【发布时间】:2015-04-29 11:25:17
【问题描述】:

所以我正在使用 MVS,我编写了以下程序

// istream::ignore example
#include <iostream>     

using std::cout;
using std::cin;
using std::endl;

int main()
{
    char first, middle, last;

    std::cout << "Please, enter your first name and your surname: ";

    first = cin.get();           // get one character
    cin.ignore(256, ' ');        // ignore until space

    middle = cin.get();          //get one character
    cin.ignore(256, ' ');        //ignore until space

    last = std::cin.get();       // get one character

    std::cout << "Your initials are " << first << middle << last << endl;

    cin.get();
    return 0;
}

程序按应有的方式运行,但一执行就立即关闭。有人可以解释一下是什么让程序这样做,以及我该如何解决它?

【问题讨论】:

  • 你的意思是它在你提供输入之前就结束了吗?你能描述一下你是如何运行它的吗?你提供了什么输入(如果有的话)?
  • “MVS”是 Visual Studio 的首字母缩写词,还是别的什么?
  • 只要我提供输入,程序就会显示正确的结果,然后立即终止。
  • 这是正常的。当程序结束时,操作系统不会保留它。如果您按 ctrl-f5,Visual Studio GUI 将提示您关闭窗口。或者在最后一条语句上放一个断点。或者从 cmd.exe 窗口运行它。我预计这个问题有 1000 个重复项。

标签: c++


【解决方案1】:

最后一个 cin.get() 正在从last = std::cin.get(); 获取换行符并自动传递。

last = std::cin.get(); 行之后添加cin.ignore(256, '\n');

或者使用假人cin.get();

cin.get();
cin.get();
return 0;

【讨论】:

  • 除了玩具示例之外,这个建议没有多大意义。
  • 为什么?你可以解释吗? @BenjaminBannier
  • 因为程序在完成它的事情后不会终止。我很确定用户会认为这是一个错误。
  • @BenjaminBannier 这不是问题所在,OP 想要这样做......出于他自己的原因。这就是他最后使用假人cin.get() 的原因。而且我很确定他这样做只是为了测试目的。并在最终过程中省略那些虚拟 cin.get() 。但无论他是为了测试还是其他什么都不是问题。问题是,他想这样做。
  • @BenjaminBannier 请在无用的 cmets 或 downvotes 之前三思。如果您必须对 OP 将要或愿意采取的方法发表任何意见,请将 cmets/downvotes 放在原始问题上,而不是它的答案之一,并请提供法律推理。
猜你喜欢
  • 1970-01-01
  • 2016-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多