2013-02-06 65 views
0

我寫一個C++程序,數字轉換爲文本。錯誤與數字轉換爲文本

我有兩個問題(編輯:只是一個現在):

  • 第一個問題是,該方案只能從20-99人寫出來的數字爲1-19正確的,一切都如我我寫了34個例子,我得到的答案是三十而不是三十四,因爲它應該是。三十之後,它只是出現錯誤,程序關閉。 [問題修正]

  • 的第二個問題是,我希望我能0-999,而不是隻有99,但林不知道之間寫數字如何做到這一點

    #include <iostream> 
    #include <string> 
    using namespace std; 
    
    
    int main() 
        { 
    int num, Ldight, Rdight; 
    
        string ones[] = {"zero", "one", "two", "three", "four", 
          "five","six", "seven", "eight", "nine", "ten", 
          "eleven", "twelve", "thirteen", "fourteen", "fifteen", 
          "sixteen", "seventeen", "eighteen", "nineteen"}; 
    
    string tens[] = {"twenty","thirty","fourty","fifty", "sixty","seventy","eighty", "ninety"}; 
    
    
        cout << "Pick a number between 1-99: "; 
        cin >> num; 
    
         if(num <= 0) 
          { 
         cout << "ERROR!" << endl; 
          } 
    
        else if (num >= 0 && num <= 19) 
          { 
    cout << "Your number is: " << ones[Rdight] ; 
          } 
    
        else if (num >=20 && num <=99) 
        { 
    Rdight = num % 10; 
    Ldight = num/10; 
    
    cout << "Your number is: " << tens[Ldight - 2] << ones[Rdight]; 
        } 
    
    return 0; 
    } 
    
+1

請在發佈前正確格式的代碼。這將幫助我們幫助你。 – m0skit0

回答

3

您應該更改:

cout << "Your number is: " << tens[Ldight - 2] << ones[num]; 

cout << "Your number is: " << tens[Ldight - 2] << ones[Rdight]; 

您計算一個永遠不會使用的值。並且還以上述ones NUM行訪問索引超出範圍。

+0

「ones」對數字0..19有效。 –

+0

@MatsPetersson,我們在'num> = 20'的情況下。對於大於20的數字,我們從不使用10或更多的值。 –

+0

對不起,我以爲你的意思是「也在上面的行中[不是在這裏複製的,而是上一個做類似的]」。我明白你的意思了。我也喜歡讓人們在明顯的「這是作業」的問題上爲自己思考,我沒有給出確切的變化,只是一些提示... –

-1

您可以通過拆分用戶輸入嘗試2件。 如果用戶輸入的是:55你在5和5分裂並打印

幾十[5] +的人[5]

這將是更好的解決方案。 您將刪除所有這些如果-S可能會導致問題

+0

不,你不會擺脫'如果',除非你重新定義英文,以便「十三」等等是有效的單詞。 – us2012

1

關於第一個問題,你的問題是在這條線:

cout << "Your number is: " << tens[Ldight - 2] << ones[num]; 

您使用了錯誤的變量,雖然正確計算的價值上面的線。我不會告訴你如何修復它,因爲你是一個學習編程,你需要學習如何發現這類問題。

【我個人會給「十」增加兩個虛擬字段,所以你也不需要做-2--這是一個小的代價】。

至於你的第二個問題,你必須考慮如何去這麼說了,你可能會拿出東西......這不是從解決單一的數字有很大不同,讓我們說。如果你需要超過大約六打左右的線條,你就解決了錯誤。

一旦你已經解決了數百個,這將是非常容易加入人數達到數百萬,甚至更進一步,用額外的代碼只有幾行。

0

使用下列行:

COUT < < 「您的數目是:」 < <數十[Ldigit - 2] < <合的[Rdigit-1];

沒有必要,因爲你輸出的那些[]元素「零」作爲錯誤當I/P < = 0,所以刪除元素「零」