2017-06-13 27 views
-4

我有以下代碼,如果它的總和小於0,但它不會正確更新difference的值,則爲負值。爲什麼?C - 使負值爲正值並在函數外部使用它

// if difference is negative, it is multiplied by -1 
    if (difference < 0) { 
     difference * -1; 
    } 

我在做什麼錯在這裏?

FIX

if (difference < 0) { 
     difference = difference * -1; 
    } 
+0

爲什麼你有兩個'秒1 ()'和'seconds2()'當他們完成相同的工作?其中一個就足夠了。在'wrongSeconds()','wrongMinutes()'和'wrongHours()'中,你有一個未使用的局部變量'int i;'。如果你的編譯器沒有警告你有關未使用的變量,你沒有將它的模糊程度設置得足夠高,或者你需要一個更好的編譯器。 –

+0

您可能還會注意到,如果您輸入,例如12小時36分,然後99秒,則可以輸入256小時345分23秒,並且驗證不會發現該問題過時的小時和分鐘完全是假的。當然,你應該能夠封裝一次輸入函數的代碼。理想情況下,你可以傳遞一個像「first」或「second」這樣的控制參數,這樣你就可以爲這兩個輸入提供一個函數。你應該檢查scanf()是否成功 - 如果用戶輸入「a」而不是「12」,代碼將會非常不愉快。 –

+2

請注意,在堆棧溢出中說'謝謝'的首選方式是 提高投票的好問題和有用的答案(一旦你有足夠的 聲望這樣做),並接受任何 問題的最有幫助的答案問(這也給你一個小小的提升你的聲譽)。 請參閱[關於]頁面,以及[如何在此處提問 ?]和 [當有人回答我的 問題時,我該怎麼辦? ?](http://stackoverflow.com/help/someone-answers) 你已經7個月左右,問了21個問題,並沒有接受任何答案。那很糟! –

回答

4

你需要改變它像difference = difference * -1;

3

只是回答你的問題相關:

下面的行不正確。

if (difference < 0) { 
     difference * -1; 
    } 

應該

if (difference < 0) { 
     difference = difference * -1; 
    } 
+5

或'difference * = -1;'或'difference = -difference;'或'difference = abs(difference);'或... –

1

當你這樣做:

difference * -1; 

您乘以-1的difference值,但是因爲你不把它分配給任何東西,或否則在結果被扔掉的表達式中使用該值。

分配結果返回給difference

difference = difference * -1; 

或者,您可以先檢查哪一個是較大的,然後從大減去較小:

int difference = (totalTimeTwo > totalTime) ? totalTimeTwo - totalTime : 
               totalTime - totalTimeTwo; 
相關問題