我的for循环后的代码无法正常工作,for循环后的print语句无法打印

时间:2019-03-18 05:53:45

标签: c++

我的代码在for循环后没有继续,光标只是一直闪烁着。 我在多个编译器上仍然尝试了同样的问题。

   Input:
   3 50
   60 20
   100 50
   120 30

当我提供此输入时,它需要3个值,而不是在for循环后不打印该语句。它只是暂停。 :(

here is the for loop (image)

这是我面临的问题。 not working after taking input (image)

这是我的代码。

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

using std::vector;

double get_optimal_value (int capacity, vector<int> weights, 
                              vector<int> values, int n){
    std::cout<<"we are in the function";
    double value = 0.0;
    int current_weight = 0;

    vector<double> v_by_w(n);
    for (int i = 0; i < n; ++i)
        v_by_w[i] = values[i] / weights[i];

    std::cout<<"printing the v/w elements";
    for (int i = 0; i < n; ++i)
        std::cout<< v_by_w[i] << " ";

    while( current_weight < capacity ) {
        int maxi = std::max_element(v_by_w.begin(),v_by_w.end()) - 
        v_by_w.begin();

        if((capacity - current_weight) > weights[maxi]){
            current_weight += weights[maxi];
            value = values[maxi];
        } else
            value += v_by_w[maxi]*(capacity - current_weight);

        v_by_w[maxi] = -1;
    }

    return value;
}

int main() {
    int n;
    int capacity;
    char ch;
    std::cin >> n >> capacity;
    vector<int> values(n);
    vector<int> weights(n);
    for (int i = 0; i < n; i++) {
        std::cout<<"hello "<<i ;
        std::cin >> values[i] >> weights[i];
    }

    std::cout<<"we took the values"; //why won't this print?

    double optimal_value = get_optimal_value(capacity, weights, values, n);

    std::cout.precision(10);
    std::cout << optimal_value << std::endl;

    return 0;
}

我的目标是打印出我们在接受输入后接受了输入。

请让我知道为什么会这样。我该怎么做才能防止这种情况。

这确实对我有帮助:)

1 个答案:

答案 0 :(得分:0)

我尝试在下面运行您的代码:

int main()
{
int n;
int capacity;
char ch;
std::cin >> n >> capacity;
vector<int> values(n);
vector<int> weights(n);
for (int i = 0; i < n; i++) {
    std::cout<<"hello "<<i ;
    std::cin >> values[i] >> weights[i];
}

std::cout<<"we took the values"; //this is getting printed after taking 2n input from keyboard
}

下面是程序示例运行的说明:

在运行代码时,我得到了空的控制台窗口。在这一点上,下面的行期望键盘有两个输入: std :: cin >> n >>容量; 所以我给下面的输入(2空格3输入) 2 3 // //请注意,此输入将2分配给变量n,将3分配给变量容量

现在程序执行控件进入for循环并在下面打印行 代码:std :: cout <<“ hello” <

输出hello 0 现在输入两个输入:output hello 011 12(11个空格12 enter)//按下回车后,将11分配给值[0],将12分配给权重[0]

这将触发循环的下一次迭代,控制台窗口如下所示:

你好011 12 你好1 现在输入两个输入:hello 113 14(13 space 14 enter)//按下回车键后,将13分配给value [1],将14分配给权重[1]

现在循环终止,循环后的文本将显示在屏幕上。

这里要捕获的是for循环的每次迭代都需要从控制台输入两个int(std :: cin >> values [i] >> weights [i];)