[英]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.