0

数値をテキストに変換する C++ プログラムを書いています。

私は2つの問題を抱えています(編集:今は1つだけ):

  • 最初の問題は、プログラムが 1 ~ 19 の正しい数字のみを書き出すことです。例として 34 を書いたときのように、20 ~ 99 のすべての数字を書き出すと、得られる答えは 30 であり、本来あるべき 34 ではありません。30 を超えるとエラーが発生し、プログラムがシャットダウンします。【不具合修正】

  • 2 つ目の問題は、99 だけでなく 0 ~ 999 の数字を書き込めたらいいのに、その方法がわからないことです。

     #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;
    }
    
4

4 に答える 4

3

これを変更する必要があります:

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

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

決して使用しない値を計算します。また、onesnum の上の行では、範囲外のインデックスにアクセスしています。

于 2013-02-06T15:38:50.687 に答える
1

最初の質問では、問題は次の行にあります。

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

上の行の値は正しく計算されていますが、間違った変数を使用しています。あなたはプログラミングを学んでいるので、この種の問題を見つける方法を学ぶ必要があるので、私はそれを修正する方法を教えていません.

[個人的には、「十」に 2 つのダミー フィールドを追加します。これは、同様に行う必要がないためです。これは-2、わずかな代償です]。

2 番目の問題については、それをどのように言うかを検討する必要があり、おそらく何かを思いつくでしょう...たとえば、1 桁を解くこととそれほど違いはありません。約半ダースほどの行が必要な場合は、間違った解決方法をとっています。

そして、数百の数を解けば、数行のコードを追加するだけで、数百万、さらにはそれ以上の数を追加するのは非常に簡単になります。

于 2013-02-06T15:41:10.277 に答える
0

次の行を使用します。

cout << "あなたの番号は: " << tens[Ldigit - 2] << ones[ Rdigit-1 ];

i/p <= 0 の場合にエラーとして出力されるため、ones[] に要素 "zero" は必要ありません。そのため、要素"zero"を削除します。

于 2013-02-06T16:03:55.120 に答える
-1

ユーザー入力を 2 つに分割して試すことができます。ユーザー入力が : 55 の場合、それを 5 と 5 に分割してから印刷します

十[5] + 一[5]

それははるかに良い解決策です。問題を引き起こす可能性のあるすべてのif-sを削除します

于 2013-02-06T15:41:08.357 に答える