将数字转换为文本时出错 我写了一个C++程序,把数字转换成文本。

将数字转换为文本时出错 我写了一个C++程序,把数字转换成文本。,c++,C++,我有两个问题(编辑:现在只有一个): 第一个问题是程序只写出1-19的正确数字,从20-99的所有数字,比如我写34的时候,我得到的答案是30,而不是应该的34。三十分钟后,它只是出现错误,程序关闭。[问题已解决] 第二个问题是,我希望我可以写0-999之间的数字,而不仅仅是99,但我不知道如何做到这一点 #include <iostream> #include <string> using namespace std; int main() { int

我有两个问题(编辑:现在只有一个):

  • 第一个问题是程序只写出1-19的正确数字,从20-99的所有数字,比如我写34的时候,我得到的答案是30,而不是应该的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;
    }
    
    #包括
    #包括
    使用名称空间std;
    int main()
    {
    int num、Ldight、Rdight;
    字符串一[]={“零”、“一”、“二”、“三”、“四”,
    “五”、“六”、“七”、“八”、“九”、“十”,
    “十一”、“十二”、“十三”、“十四”、“十五”,
    “十六”、“十七”、“十八”、“十九”};
    字符串十[]={“二十”、“三十”、“四十”、“五十”、“六十”、“七十”、“八十”、“九十”};
    cout>num;
    
    如果(num您应该更改此项:

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

    cout您应该更改以下内容:

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

    cout您可以尝试将用户输入分成两部分。
    如果用户输入为:55,则将其拆分为5和5,然后打印

    十位数[5]+一位数[5]

    这将是更好的解决方案。
    您将删除所有可能导致问题的if-s

    您可以尝试将用户输入分成两部分。 如果用户输入为:55,则将其拆分为5和5,然后打印

    十位数[5]+一位数[5]

    这将是更好的解决方案。
    您将删除所有可能导致问题的if-s对于第一个问题,您的问题在这一行:

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

    cout对于第一个问题,您的问题如下:

    cout << "Your number is: " << tens[Ldight - 2] << ones[num];
    
    cout使用以下行:

    不能使用以下行:


    无法在发布前正确设置代码格式。这将帮助我们帮助您。请在发布前正确设置代码格式。这将帮助我们帮助您。“一个”对数字0..19有效。@Matstpeterson和我们的情况是
    num>=20
    。对于大于20的数字,我们从不使用10或更多的值。对不起,我以为您的意思是“在上面的行中也有[不是复制到这里的那一行,而是前一行执行类似操作]”.我明白你的意思。我也喜欢让人们在明显的“这是家庭作业”问题中独立思考,我没有给出确切的变化,只是一些提示…@Mats我通常会同意你的看法,但我认为这个问题是一个“知道做对的事,做错了的事,盯着代码看太久而没有注意到”的明显例子-我认为在这种情况下给出精确解没有任何害处。“1”对数字0..19有效。@Matstpeterson和我们的情况是
    num>=20
    。对于大于20的数字,我们从不使用10或更多的值。对不起,我想你的意思是“也在上面的行中[不是复制到这里的那一行,而是前一行做了类似的事情]“。我明白你的意思。我也喜欢让人们在明显的“这是家庭作业”问题中独立思考,我没有给出确切的变化,只是一些提示…@Mats我通常会同意你的看法,但我认为这个问题是一个明显的例子,“知道该做什么,做了什么错事,盯着代码看了太久而没有注意到”-我认为在这种情况下给出准确的解决方案没有什么坏处。不,除非你重新定义英语,使“十个三”等词成为有效词,否则你不会去掉
    if
    s。不,你不会去掉
    if
    s,除非你重新定义英语,使“十个三”等词成为有效词。