2015-10-08 68 views
-1

我有一個非常惱人的問題。讓變量忘記以前的值?

首先,我編寫了一個只運行一次的程序,一切都很完美,直到我決定使用用戶輸入重新執行它。

現在我遇到了很大的麻煩。當我重新執行程序時,它會落入錯誤的開關中,或者因爲變量不會自行重新初始化而導致語句失敗。要描繪它:

// Libraries and other stuff 

int numA, numB, numC; 
char charA = 'A', charB = 'B', charC = 'C'; 

int main() { 

do { 

// Randomly assigning some numbers between 1-3 range into numA, numB and numC 

... 

// Converting the integers above into chars depending on the random numbers 

switch (numA) 
{ 
    case 1: 
    numA = charA; 
    break; 

    case 2: 
    numA = charB; 
    break; 

    case 3 
    numA = charC; 
    break; 
} 

switch (nu... 

... 

// A lot of IFs and SWITCHs that consistently changes the values above within themselves. 

... 

// Taking 1 input from user to re-execute the program 

} while (input == 1) 

return 0; 

} 

我知道我搞砸了一切與起初並不正確初始化變量,但我沒有刨,使其重新執行,當我開始創建它,現在我正在尋找最佳的逃生方式。我能以某種方式讓變量忘記它們攜帶的以前的值嗎?或者我真的需要重新初始化所有的東西嗎?

+0

當初始化它們的時候,將它們的值初始化爲0是很安全的,因爲我不知道後面的代碼如何處理它們。另外,如果我明白,當他們需要從開始時重新使用,分配等於0.你可以發佈代碼分配他們的數字? –

回答

1

將變量的聲明移到循環內的作用域中,以便在每次傳遞時都將重新初始化它們。

int main() { 

do { 
//new scope 
{ 
int numA, numB, numC; 
char charA = 'A', charB = 'B', charC = 'C'; 

// Randomly assigning some numbers between 1-3 range into numA, numB and numC 

... 

// Converting the integers above into chars depending on the random numbers 

switch (numA) 
{ 
    case 1: 
    numA = charA; 
    break; 

    case 2: 
    numA = charB; 
    break; 

    case 3 
    numA = charC; 
    break; 
} 

switch (nu... 

... 

// A lot of IFs and SWITCHs that consistently changes the values above within themselves. 

... 

// Taking 1 input from user to re-execute the program 
}//end of scope 
} while (input == 1) 

但是,您應該明白,未初始化變量的使用是未定義的行爲,應始終避免使用。

你的char變量初始化(char charA = 'charA')也是完全無效的。您不能在一個字符變量中存儲6個字符的字符串(5個字符和空終止符)。您應該使用char*或這是簡單的印刷錯誤,它應該是char charA = 'A'

+0

你剛剛救了一天:)謝謝! (順便說一句,抱歉讓我感到困惑,我錯誤地將字符初始化設置錯了,現在我編輯了它。) – Leo

0

您將所有字符初始化爲'c'。當你將所有字符初始化爲'charA','charB'&'charC',但初始化字符時它只需要一個字符,如char ch1= '6', ch2='\n' ; 因爲所有初始化符的首字母通用都是'c'。這就是爲什麼所有初始化爲'c'。
你也忘了之後的分號,而()做的。
此外,您正在使用numA作爲開關控制變量。 &在switch語句中,你正在改變numA內的值。這沒有錯,但是不好的做法。對不起,很多編輯,因爲我在stackexchange應用程序,我需要看很多次的問題。