为什么当我输入数字时程序结束

Why does the program end when I enter a number?

本文关键字:程序 结束 数字 输入 为什么      更新时间:2023-10-16

几天前我开始在C++上编程,有些事情真的让我很麻烦:

每当我输入号码时,程序就会结束。

法典:

using namespace std;
int main()
{
    int entry;
    cout << "Write a number: ";
    cin >> entry;
    cout << entry;
    cin.get();
    return 0;
}

我在这里需要一些帮助,以便我的程序可以正常运行。

对了,我的意思是结束后输出数字...但它只是在我输入数字并按回车后结束它不打印它。

更新:

为了那些不明白我的意思的人(对不起我的英语(

好的,让我解释一下。

-所以程序应该从键盘上正确获取值。

-我输入一个数字,假设是 6,好的,现在我按回车键。

-好的,现在数字应该输出在屏幕上,但这不会发生,因为程序关闭得太快。

但这实际上是通过添加第二个cin.get();或在每次数据输入请求后添加一个cin.ignore();来解决的。

这是一个稍微改进的版本,可能更接近您想要的版本

#include <string>
#include <sstream>
#include <iostream>
int main()
{
    int n;
    std::string line;
    while (true)
    {
        std::cout << "Please enter an integer: ";
        if (!(std::getline(std::cin, line))) { return 1; /* error! */ }
        std::istringstream iss(line);
        if (iss >> n) { break; }
    }
    std::cout << "Thank you. You said: " << n
              << "nnPlease press Enter to quit.";
    std::getline(std::cin, line);
}

当输入流在读取另一行之前关闭或以其他方式终止时(例如,如果您在控制台上按 Ctrl-D(,则会触发getline中的错误条件。在输入有效整数之前,将令牌提取到n失败,并且循环将继续循环,直到发生这种情况。

您需要做的就是使用读取整数后剩余的换行符。

这在Java中也会发生。

using namespace std;
int main()
{
    int entry;
    cout << "Write a number: ";
    cin >> entry;
    cout << entry;
    cin.get(); //Consume newline
    cin.get();
    return 0;
}
get()

流中读取一个且只有一个字符,因此程序在您输入号码后结束是完全正常的。

查看std::basic_istream<>::getline()方法,或者更简单地说,std::getline()不需要动态缓冲区。

如果您需要有关C++中基本 IO 的更多信息,可以阅读以下文档:基本输入/输出 - C++

更新

就像评论中所述,我误解了这个问题,我最初认为只有一位数字被读取到变量中。

再次仔细阅读后,我无法理解问题出在哪里。

这样做的原因是你正在使用

cin.get();
return 0;

在程序结束时,cin.get()读取您输入的数字,然后直接进入return 0;从而结束程序。

要停止此操作,您可以在return 0;之前添加一个额外的cin.get();或使用

system("Pause");

return 0;之前