這個問題在這里已經有了答案: 在 C 中宣告的、未初始化的變數會發生什么?它有價值嗎? (9 個回答) 20 小時前關閉。
我在做一些業余練習時遇到了這個錯誤:
#include <stdio.h>
int main(){
int answer = 5;
int guess;
while (guess != answer) {
printf("enter a number: ");
scanf_s("%d", &guess);
}
printf("you guessed the correct number which was 5!");
return 0;
}
這是非常簡單的while回圈練習,但由于某種原因,即使我正在做與此視頻中的老師告訴我做的完全相同的事情,它也行不通。
我只是通過給出int guess一個值來修復它,比如int guess = 0.
但是為什么該代碼在視頻中有效,而在我的編譯器中無效?
uj5u.com熱心網友回復:
這不是錯誤,而是來自編譯器的警告。它告訴你,你正在訪問一個未定義的值,因為你沒有初始化你的變數。
未明確給出值的區域變數稱為“未初始化”,因為它假定“已分配記憶體塊中的任何內容”的值,這通常會導致垃圾值,而絕對不是您的想。
第一個問題是在回圈中。根據 'guess' 中的垃圾值,它可能決定根本不運行您的回圈(因為 'guess' 可能只是偶然持有值 '5')。
另一個問題是您使用了 scanf。如果輸入不符合您的要求(即不是數字),guess將保持不變。有關更多詳細資訊,請參閱 scanf 上的檔案。
我想講一個小軼事:我曾經有一個bool(C ,應該只為真或假)變數,它在某些情況下未初始化。
然后,在路上,它被檢查,if (!variable)并且在 else 條件下它顯示為else if (variable == true)。它沒有進入任何一個分支,因為正如除錯器所揭示的那樣,我的變數的值既不是 true 也不是 false。它是 42。這就是未初始化的變數所具有的危險性。你永遠不會知道你得到了什么。
uj5u.com熱心網友回復:
對任何事物使用未初始化的變數(除了為其賦值)會呼叫未定義的行為。在這里,您將它用作比較中的運算元。這意味著任何事情都可能發生,包括給人一種一切都按預期作業的印象。
在這些情況下,編譯器不需要報告錯誤甚至警告您(盡管它可能會這樣做)。只是代碼錯了。
如果這位老師選擇忽略這件事,你應該考慮向別人學習。
進一步閱讀:
- 未定義、未指定和實作定義的行為
- 在 C 中宣告的、未初始化的變數會發生什么?它有價值嗎?
- 權威 C 書籍指南和清單
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/336494.html
標籤:C
