我面臨一個錯誤,在從while回圈接收用戶輸入后,我的代碼不接受最后一個值。這個錯誤發生在一個特定的例子上,我不知道為什么會這樣。
因此,例如,用戶輸入:
7
3 1 4 0 0 2 0
輸出是:
3140020
但是,使用以下用戶輸入(這是特定示例):
7
3 0 1 0 0 2 0
輸出應該是:
3010020
但是,輸出是:
301002
我完全想不通。代碼附在下面:
#include <iostream>
#include <vector>
#include <math.h>
using namespace std;
// Definition for a binary tree node.
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode() : val(0), left(NULL), right(NULL) {}
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
TreeNode* construct_tree(){
int n;
cin >> n;
int curr_inp;
vector<TreeNode*> vec;
for (int i = 0; i < n; i ) {
cin >> curr_inp;
cout << curr_inp; // **this is the place of bug**
if (curr_inp != 0)
vec.push_back(new TreeNode(curr_inp));
else
vec.push_back(NULL);
}
for(int i = 0; i< floor(n/2);i )
{
vec[i]->left = vec[2*i 1];
vec[i]->right = vec[2*i 2];
}
cout << '\n';
return vec[0];
}
int main() {
TreeNode* root = construct_tree();
return 0;
}
uj5u.com熱心網友回復:
問題不在cout << curr_inp;問題在您使用的回圈中
for(int i = 0; i< floor(n/2);i )
{
vec[i]->left = vec[2*i 1];
vec[i]->right = vec[2*i 2];
}
您正在試圖打電話left和right用空載體
添加空檢查后,沒有分段錯誤
for(int i = 0; i< floor(n/2);i )
{
if (vec[i]) {
vec[i]->left = vec[2*i 1];
vec[i]->right = vec[2*i 2];
} else {
cout << "nullptr \n";
}
}
現在當我使用
7
3 0 1 0 0 2 0
我得到了以下輸出
7
3 0 1 0 0 2 0
3010020nullptr
結論:我不知道你的邏輯是什么,但問題是因為取消參考nullptr
uj5u.com熱心網友回復:
您的construct_tree()函式在其第二個for回圈內崩潰。這會阻止寫入的最后一個字符的輸出cout,因為cout默認情況下輸出是緩沖的,并且最后一個字符仍在緩沖區中,并且在發生崩潰時尚未重繪 到控制臺。
cin并且默認情況下cout是tie()一起的,因此從 讀取輸入cin將首先隱式重繪 cout,但cin在第一個for回圈的最后一次迭代寫入后沒有讀取完成cout。
在進入第二個回圈之前,嘗試在第一個回圈完成之后cout << flush或cout.flush()之后添加一個呼叫。或者在第一個回圈內使用。然后您將看到顯示的最后一個字符。forforcout << curr_inp << flush;for
然后,您需要修復崩潰。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/372494.html
上一篇:如何在cmd而不是vscode的內部終端上運行我的代碼
下一篇:C 規范專案結構,找不到標題
