我對一個簡單的時鐘進行編程,發現雖然小時和秒沒有問題,但如果我在一行中宣告變數,分鐘就不行了(分鐘從16開始,而不是預期的0開始)。
如果我在分開的行中宣告變數,問題就解決了。我還是很好奇,有人知道為什么嗎?
下面是代碼:
#include <stdio.h>/span>
#include <indows.h>
/h=hours, m=minutes, s=seconds.
int main(){
int h, m, s = 0; //this is the line: why "m" starts at 16 and not 0?
int delay = 1000;
while(1){
s ;
if(s>59){
m ;
s=0。
}
if(m>59){
h ;
m=0。
}
if(h>12){
h=1;
}
printf("
d:d:d", h, m, s)。)
睡眠(延遲)。
system("cls")。
}
}
uj5u.com熱心網友回復:
你的變數是未初始化的 - 它們可以取任何值,在初始化之前使用它們是(通常)不確定的行為。
一行代碼如:
int h, m, s = 0;
沒有定義每個變數為0 - 只有第三個變數。它等同于:
int h。
int m;
int s = 0;
要解決這個問題,請將所有的變數初始化為0:
int h = 0, m = 0, s = 0;
uj5u.com熱心網友回復:
你還沒有初始化h或m,所以它們的初始值可能是記憶體中已經存在的東西,或者完全是別的東西。C并不自動將變數初始化為0。
當你在一行中宣告多個變數時,該值只適用于它后面的變數。所以
int a, b, c = 5;
只設定c為5,而
int a = 1, b = 2, c = 3;
初始化所有這些。在你的案例中,你只需要使用
。int h = 0, m = 0, s = 0;
你的編譯器可能有一個警告選項(-Wall在gcc中),它應該警告你使用一個未初始化的變數。
uj5u.com熱心網友回復:
int h, m, s = 0; // This is the line: Why "m" starts at 16 and not 0?
嗯,我想,因為C語言不是英語。 "= 0"部分只適用于那個變數名s,而不是整行。
雖然,你知道,英語也不一定適用于整行的修飾語。 如果我說 "有三個人站在街角。一個男人、一個女人和一個叫布拉德的男孩",你不會推斷出那個男人和那個女人也叫布拉德,對嗎?
[注:現在我的腦海中浮現出那首老歌 "我和你還有一只叫布的狗"。) ]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/306947.html
標籤:
