为什么当我输入数字时程序结束
Why does the program end when I enter a number?
几天前我开始在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;
之前
- 为什么我的两个 cin 语句没有在程序结束时运行?
- 全局向量导致 C++ 程序结束时出现段错误
- 用于在程序结束后暂停程序的有效循环
- C 链接的列表用户输入限制验证导致程序结束
- 该程序结束得太早了
- 动态内存分配 - 为什么程序结束时没有"delete"?
- 获取热线(CIN,答案5);在我的程序结束时不起作用
- 当c++程序结束时,指针会从内存中释放吗
- (全局)静态变量将在程序结束时销毁
- 尝试在选择交易后阻止银行程序结束.C++
- 应用程序结束时间和启动时间
- mfc应用程序结束后,CMainFrame的析构函数调用发生访问冲突
- 我的程序结束后会冻结
- 降雨程序结束时出错
- C++ 程序结束后重新初始化的对象
- While循环和bool使程序结束
- 编译后的c++输出文件在程序结束时显示随机字符
- 如何在程序 c++ 结束时留出空格
- 我应该在程序结束时删除C++中的大树集合,还是把它留给操作系统
- 在C++程序结束时,总计未相加