使用std :: cout

时间:2015-06-11 09:18:49

标签: c++

我的代码在这里: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;
    }
}

我输入了一些输入,但它没有输出任何内容,甚至在开头都没有输出“yep”。有没有我没做错的事情? cout来自于我认为我已经包含了我需要的一切。但不知怎的,没有任何东西出现在ideone.com的stdout区域。我没有在任何其他编译器上尝试过此代码。建议?有时,它输出3个空行(如果我取出所有其他无聊的输出,对于我的输入,应该有2行字符串+新行,所以3行是正确的。)

我使用的输入:

  

5
toioynnkpheleaigshareconhtomesnlewx
3   ttyohhieneesiaabss
0

2 个答案:

答案 0 :(得分:1)

当你这样做时:

GetPosition( Array source)
{
    foreach(var element in source)
       Object.ReferenceEquals(this,element)
}

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

<强>解决方案

修改计算以确保生成的索引位于message += letter[current_row * (col + 1) - i - 1];

的范围内

我猜你想要的实际上是:

letter.size()

要覆盖当前行中最后一个字符,您需要message += letter[(current_row + 1) * col - i - 1]; // ^^^^^^^^^^^^^^^^^^^^^^^ 而不是(current_row + 1) * col

Demo

无输出的一种可能解释

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

答案 1 :(得分:1)

手动运行代码。

  1. 第一次运行会产生以下结果:
  2. current_row = 0

    current_row%2 = 0

    i = 0

    - &GT;您的代码将进入&#34; else&#34;条件:

    消息+ =字母[0 *(5 + 1)-0-1] //字母[-1]违反!

    1. 此索引可能会溢出数组:
    2. letter [i + current_row * col]; // I + * CURRENT_ROW 5