Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这段代码会在此时退出? 我是C++新手。我偶然发现了一个辅导问题,我想我应该用我学过的几样东西来解决它。我已经编写了一定程度的代码,但代码在某一点上存在,我真的不知道为什么。我不想详细讨论教程问题,因为我实际上希望根据我从一开始对它的理解继续讨论,我知道未来的回答者可能希望改变这一点。代码是解释性的,我只写了几行_C++ - Fatal编程技术网

为什么这段代码会在此时退出? 我是C++新手。我偶然发现了一个辅导问题,我想我应该用我学过的几样东西来解决它。我已经编写了一定程度的代码,但代码在某一点上存在,我真的不知道为什么。我不想详细讨论教程问题,因为我实际上希望根据我从一开始对它的理解继续讨论,我知道未来的回答者可能希望改变这一点。代码是解释性的,我只写了几行

为什么这段代码会在此时退出? 我是C++新手。我偶然发现了一个辅导问题,我想我应该用我学过的几样东西来解决它。我已经编写了一定程度的代码,但代码在某一点上存在,我真的不知道为什么。我不想详细讨论教程问题,因为我实际上希望根据我从一开始对它的理解继续讨论,我知道未来的回答者可能希望改变这一点。代码是解释性的,我只写了几行,c++,C++,下面是代码: #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" <&l

下面是代码:

#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;


}
#包括
#包括
#包括
使用名称空间std;
双倍平均每名学生(){
cout(用户输入){
++计数器;
如果(计数器<5)和+=0.15*用户输入;
否则,如果(计数器>4&&计数器<7)和+=0.20*用户输入;
}
返回总次数/考试次数;
}
整数注册号(){
不能麻木;
返回reg_numb;
}
int main(){
向量注册表号列表;
向量学生平均值;
reg_num_list.向后推(reg_number());
学生平均。推回(平均每个学生();
字符串回答;
答不上来;

cout内部的循环
average\u each_student()
运行,直到进一步的数据输入失败,并且
std::cin
进入失败状态(即,它获得
std::ios\u base::failbit
set)

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

std::cout << "read '" << answer << "'\n";
若要清除流的失败,请声明。您可能希望使用忽略输入的字符

std::cin.ignore(); // ignore the next character

std::cin.ignore(std::numeric_limits::max(),'\n');
//忽略所有内容,直到行的末尾

使用cin.clear();在cin>>之前回答;这将解决问题。但您没有控制输入。它只是运行到cin。

可能性:1。
cin
处于错误状态。出现错误时,您无法读取
cin
cin>>回答;
立即返回并
cout>>回答;
打印空字符串。2。
cin>>reg_numb;
(以及其他数字读取)。要使其起作用,您必须按enter键。转换注册表项不会占用enter键,因此
cin>>answer;
会立即感到满意,并在答案中放入一个空字符串。是的..谢谢..我在提问之前应该好好研究一下..我看到了另一个类似的问题,我认为解决方案是正确的(这显然和你的一样)也适用于这一点。我想这是一些重复。好吧,我现在明白了。cin.clear()和cin.ignore()的组合(我现在正在学习两者)解决了这个问题。平均每个学生()按预期使用非字符终止。在
cin>>应答
之前,执行终止操作的非字符键和完成“在缓冲区中等待”功能的返回键可以工作。
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