无法使用std :: cout打印/输出任何内容

我在这里有代码:http : //ideone.com/Q6kzBQ

#include <iostream>
#include <string>

int main(){
    std::cout << "yep" << std::endl;
    std::string message;
    while (true){
        int col;
        std::cin >> col;
        if (col == 0){
            return 0;
        }
        else if (col > 0){
            std::string letter;
            std::cin >> letter;
            //std::cout << "yep" << std::endl;
            int letter_length = letter.size();
            int row = letter_length / col;

            message = "";

            for (int i = 0; i < col; i++){
                int current_row = 0;

                while (current_row != row){
                    if ((current_row % 2)){
                        message += letter[i + current_row * col];
                        std::cout<<"current:" << message<<std::endl;
                    }
                    else {
                        message += letter[current_row * (col + 1) - i - 1];
                        std::cout<<"current:" << message<<std::endl;
                    }
                    current_row++;
                    //std::cout<<"current:" << message<<std::endl;
                }
            }
        }
        std::cout << message <<std::endl;
    }
}

我输入了一些输入,但是它什么也没有输出,甚至在一开始都不输出。有没有我做不正确的事情?cout是从这里来的,所以我认为我已经包含了我需要的一切。但是不知何故,ideone.com的标准输出上没有任何显示。我没有在任何其他编译器上尝试过此代码。有什么建议吗?有时,它确实输出3条空行(如果我取出所有其他轻浮的输出,对于我的输入,应该有2行包含字符串+新行,因此3行是正确的)。

我使用的输入:

5
toioynnkpheleaigshareconhtomesnlewx
3
ttyohhieneesiaabss
0

莫希特·贾恩(Mohit Jain)

当您这样做时:

message += letter[current_row * (col + 1) - i - 1];

您可能会下调导致未定义行为的数组索引,因此您可能会或可能不会获得任何输出。

解决方案

修改计算以确保生成的索引在以下范围内 letter.size()

我想您实际上想要的是:

message += letter[(current_row + 1) * col - i - 1];
//                ^^^^^^^^^^^^^^^^^^^^^^^

为了达到角色超越过去的当前行中,你需要(current_row + 1) * col和不current_row * (col + 1)

演示版

一种无输出的可能解释

当访问超出范围的字符时,将结束在流中打印一些乱码。当尝试将此流打印在网页上时,Web引擎拒绝打印任何内容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章