litengyue 发表于 2024-10-12 21:37:12

数字转换字母的问题

#include <stdio.h>
#include <string.h>

int main()
{
        char nums[] = {"one", "two", "three", "four", "five", "six",
                                                "seven", "eight", "nine", "ten", "eleven", "twelve"};
        char add[] = {"thir", "four", "fif", "six", "seven", "eigh", "nine"};
        char chs = "";
        int num, i, j;
       
        strcpy(chs, ""); // 重新初始化
        flag = 0; // 重新初始化标志
               
        printf("请输入一个1~100之间的整数: ");               
        scanf("%d", &num);

        if (num <= 12)
        {
                strcat(chs, nums);
        }
       
        if (12 < num && num < 20)
        {
                strcat(chs, add);
                strcat(chs, "teen");
        }
       
        if (20 <= num && num < 100)
        {
                i = (int)num/10;
               
                if (i != 4 && i != 2)
                {
                        strcat(chs, add);
                        strcat(chs, "ty");
                }
                else
                {
                        if (i == 2)
                        {
                                strcat(chs, "twenty");
                        }
                        if (i == 4)
                        {
                                strcat(chs, "forty");
                        } // 特殊情况
                }
               
                if (i == num/10)
                {
                        flag = 1;
                }
                if (i <= num/10)
                {
                        j = num-i*10-1;
                       
                        strcat(chs, "-");
                        strcat(chs, nums);
                }
        }

        printf("%s", chs);

        return 0;
       
(可能有一些复制错了)
就是我输入20,30,...这些整十数,总会在结尾加一个"-",为什么?

FishC 发表于 2024-10-12 21:40:56

看起来你是在尝试编写一个程序,将数字转换为字母形式,不过你在程序中的许多地方都有些小问题。以下是对你代码的修正和建议:

1. **引入头文件**:你在代码中用了`#include`,但没有具体的头文件名。通常会是`#include <stdio.h>`和`#include <string.h>`。

2. **字符串存储**:需要用`char *`而不是`char[]`来存储字符串集合:

   char *nums[] = {"one", "two", "three", "four", "five", "six",
                   "seven", "eight", "nine", "ten", "eleven", "twelve"};

3. **字符串连接**:由于`chs`是一个字符数组,你不能直接用`chs = "";`这样初始化,而是应使用`strcpy`等函数。初始化`chs`之前还要分配足够的内存。

4. **未定义变量**:变量`flag`应该定义,不然会引发未定义错误。

5. **处理用户输入和数字转换**:你可以通过判断`num`的范围来选择对应的字符串:

   #include <stdio.h>
   #include <string.h>
   
   int main()
   {
       char *nums[] = {"one", "two", "three", "four", "five", "six",
                     "seven", "eight", "nine", "ten", "eleven", "twelve"};
       char *add[] = {"thir", "four", "fif", "six", "seven", "eigh", "nine"};

       int num;

       printf("请输入一个1~100之间的整数: ");
       scanf("%d", &num);

       if (num >= 1 && num <= 12) {
         printf("%s\n", nums);
       } else if (num == 13) {
         printf("thirteen\n");
       } else if (num >= 14 && num <= 19) {
         printf("%steen\n", add);
       } else if (num == 100) {
         printf("one hundred\n");
       } else if (num >= 20 && num < 100) {
         int tens = num / 10;
         int ones = num % 10;
         char *tens_word, *ones_word = "";

         switch (tens) {
               case 2: tens_word = "twenty"; break;
               case 3: tens_word = "thirty"; break;
               case 4: tens_word = "forty"; break;
               case 5: tens_word = "fifty"; break;
               case 6: tens_word = "sixty"; break;
               case 7: tens_word = "seventy"; break;
               case 8: tens_word = "eighty"; break;
               case 9: tens_word = "ninety"; break;
         }
         if (ones > 0) {
               ones_word = nums;
         }
         printf("%s %s\n", tens_word, ones_word);
       } else {
         printf("输入无效,请输入一个1~100之间的整数。\n");
       }

       return 0;
   }

以上是一个简单示例,包括从1到100的数字转换。确保代码逻辑上处理了用户输入的各种情况。希望这对你有所帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 数字转换字母的问题