gpt4 book ai didi

c++ - 为什么这段代码此时退出?

转载 作者:太空狗 更新时间:2023-10-29 21:39:38 24 4
gpt4 key购买 nike

我是 C++ 新手。我偶然发现了一个教程问题,我想我会用我学到的一些东西来解决它。我已经写了一定程度的代码,但代码在某个点退出,我真的想不通为什么。我不想详细介绍教程问题,因为我实际上希望根据我从一开始就理解它的方式继续它,而且我知道 future 的回答者可能想要改变它。代码是解释性的,我只写了几行。

代码如下:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

double average_each_student() {

cout << "\n>Enter your scores seperated by spaces and terminated with a period\n"
<< ">Note: scores after total number of six will be truncated.\n"
<< endl;

double sum = 0, average = 0;
int user_input, counter = 0;
const double no_of_exams = 6;

while(cin >> user_input) {
++counter;
if(counter < 5) sum += 0.15 * user_input;
else if(counter > 4 && counter < 7) sum += 0.20 * user_input;

}

return sum / no_of_exams;
}

int reg_number() {

cout << "Enter your registration number: " << endl;
int reg_numb;
cin >> reg_numb;
return reg_numb;

}

int main() {

vector<int> reg_num_list;
vector<double> student_average;

reg_num_list.push_back(reg_number());
student_average.push_back(average_each_student());

string answer;
cout << "\n\nIs that all??" << endl;
//everything ends at this point.
//process returns 0

cin >> answer;

cout << answer;


}

代码在 cout << "\n\nIs that all??" << endl; 处退出.之后的其余部分不是我打算做的,但我只是用那部分来了解周围发生的事情。

PS:我知道还有其他方法可以改进整个事情,但我是根据我目前的知识编写代码的,我希望保持我目前正在实现的想法。如果现在不改变,我将不胜感激。我只需要知道我做错了什么导致代码在那个时候结束。

最佳答案

average_each_student() 中的循环一直运行到数据的进一步输入失败并且 std::cin 进入失败状态(即,它得到 std::ios_base::failbit 设置)。

因此,main() 中的输入立即失败,输入内容的输出只是打印未更改的字符串。也就是说,您对输入之前存在的程序的看法实际上是错误的:它只是不等待处于失败状态的流上的输入。由于您的输出没有添加任何可识别的内容,因此输出似乎什么也不做,尽管它实际上打印了一个空字符串。您可以通过添加一些内容轻松验证此声明,例如

std::cout << "read '" << answer << "'\n";

是否可以从输入流的失败状态中恢复取决于它是如何失败的。如果您输入数字直到指示流终止(在终端上使用 Ctrl-D 或 Ctrl-Z,具体取决于您使用的系统类型),则无法恢复。如果你终止输入一个非数字,你可以使用

std::cin.clear();

清除流的失败声明。您可能希望使用

忽略输入的字符
std::cin.ignore(); // ignore the next character

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
// ignore everything up to the end of the line

关于c++ - 为什么这段代码此时退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32363720/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com