2014-03-30 67 views
-1

我買了一個小程序,我做的一個問題,我希望它能夠得到的美元匯率,改變成不同的貨幣,它是工作,但打印了很多莫名其妙的話它的工作原理後... 看看我得到的結果的屏幕截圖: enter image description here我的C代碼有什麼問題?循環中的東西?

+1

你不介意在這裏張貼的代碼 – KRUKUSA

+0

打印的值都是垃圾值......我建議你試試使用另一種方法檢查數組的末尾......我不認爲這是一個很好的做法,像你在代碼中一樣檢查浮動數組的結束。 – nravichan

+0

請將代碼和代碼塊輸出,而不是鏈接到屏幕截圖。 –

回答

1

變化

while ((quintity[Index]) != '\0') { 
    Index++; 

for (Index = 1; Index < inputIndex; Index++) { 

,然後再試一次。打印數據時

+0

不知道_why_這是downvoted,leeduhem,但我認爲這可能與索引增加時有關。我原本以爲增加循環體​​中的第一件事是OP的錯誤,但後來我注意到了「門$」的東西,所以我假設第一項是轉換因子。因此,您的for循環在技術上不等同於OPs while循環。應該相對容易解決這個問題。 – paxdiablo

+0

@paxdiablo你說得對,回答固定。謝謝。 –

+0

這個答案是好的,它似乎我們有人自動downvoting每個答案.. –

1

你的循環狀態:

while (quintity[Index] != '\0') { 

掩蓋一個事實,即你的輸入迴路從來沒有真正陣列中放置零從用戶得到的值時。 這就是爲什麼循環在數據的(明顯)結束之後繼續進行。

您可以輸入迴路後,立即通過這樣做解決這個問題,:

while (scanf ("%f", &input) != '\0') { 
    quintity[inputIndex] = input; 
    inputIndex++; 
} 
quintity[inputIndex] = 0; // add this 

不過請注意,這意味着你不能指望明智的輸出,如果你真的進入零作爲輸入值。

這是使用端部線圈檢測的定點方法。即使您輸入零,長度方法也會起作用。我的意思是,在打印數據時使用inputIndexIndex極限值:

while (Index < inputIndex) { 

總之,我相信下面的代碼將是一個更好的解決方案,因爲:

  1. scanf返回轉換所以你應該繼續,而這是一個,而不是項目的數量,同時它不是零(有可能爲scanf實際回報某些錯誤-1,而你沒有真的想繼續)。
  2. 你應該在打印循環使用inputIndex作爲限制器index。這將比基於哨兵的支票更好,因爲它將允許輸入零金額。
  3. 你真的應該不會嘗試存儲的值,如果你的inputIndex達到MAX。這使您的代碼適合緩衝區溢出。

考慮所有的考慮,我將其轉換爲類似:

while ((inputIndex < MAX) && (scanf ("%f", &input) == 1)) 
    quintity[inputIndex++] = input; 

for (Index = 1; Index < inputIndex; Index++) { 
    HamaraGate = quintity[0] * quintity[Index]; 
    : 
    sumDollar += HamaraGate; 
}