問題總結
假設由于某種原因,人們試圖將整數 31 存盤為int num = 0031;
如果我列印出來,num我會得到 25。cin但是,如果我使用,存盤的數字確實是 31。您可以通過運行以下代碼并在出現提示時鍵入 0031 來驗證這一點。
代碼
#include <iostream>
using namespace std;
int main() {
cout << "Version 1\n========="<< endl;
{
int num = 0031;
cout << "Input was: " << num << endl;
}cout << "=========" << endl;
cout << "Version 2\n========="<< endl;
{
int num;
cout << "Insert num: ";
cin >> num;
cout << "Input was: " << num << endl;
}cout << "=========" << endl;
return 0;
}
尋找答案,我發現這個Int 前導零 - 意外的結果
在 C 中是同樣的情況嗎?即,帶前導零的整數存盤為八進制整數?
為什么第二個塊會給出預期的結果?是因為在使用cin流時存盤為字串然后stoi()隱式使用該函式嗎?
uj5u.com熱心網友回復:
對于 C 中的整數文字,請參見例如此處:https : //en.cppreference.com/w/cpp/language/integer_literal。是的,0031是一個八進制整數文字。
要從第二個版本的代碼中獲得預期的輸出,您可以使用std::octio-manipulator:
int num;
cout << "Insert num: ";
cin >> std::oct >> num;
cout << "Input was: " << num << endl;
uj5u.com熱心網友回復:
這是因為您正在num使用八進制整數文字進行初始化。其值為 25 十進制。
uj5u.com熱心網友回復:
如果你將 31 從八進制轉換為十進制,你會得到 25,所以你在八進制中初始化了你的 num
uj5u.com熱心網友回復:
您不能0在整數變數中用作起始值。因為0在整數中被忽略。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/325457.html
