[英]Cannot print/output anything with 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
共享信息共享
3
肝硬化
0
当您这样做时:
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引擎拒绝打印任何内容。
手动运行您的代码。
current_row = 0
current_row%2 = 0
我= 0
->您的代码将进入“其他”条件:
讯息+ = letter [0 *(5 + 1)-0-1] //违反了letter [-1]!
字母[i + current_row * col]; // i + current_row * 5
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.