【问题标题】:How to print a number in spellings?如何在拼写中打印数字?
【发布时间】:2021-10-06 12:16:12
【问题描述】:

所以我在这里尝试编写一个代码,将数字转换为其拼写格式。例如,用户输入任何数字,如 320,则输出应为“三二零”。以下是我尝试过的-

#include <stdio.h>
void main(){
long int num,rev=0 ;
printf("Enter any number to print in words: ");
scanf("%ld",&num);
while(num!=0){
    rev=(rev*10)+(num%10);
    num/=10 ;
}
while(rev!=0){
    long int x=rev%10;
    switch(x){
        case 0:
        printf("Zero ");
        break;
        case 1:
        printf("One ");
        break;
        case 2:
        printf("Two ");
        break;
        case 3:
        printf("Three ");
        break;
        case 4:
        printf("Four ");
        break;
        case 5:
        printf("Five ");
        break;
        case 6:
        printf("Six ");
        break;
        case 7:
        printf("Seven ");
        break;
        case 8:
        printf("Eight ");
        break;
        case 9:
        printf("Nine ");
        break;
       }
   }
 }

现在的问题是,这段代码正在产生一个无限循环,就像我输入一个数字说 21,然后它开始打印“二二二二.........”直到无穷大。

请帮我解决这个问题。

【问题讨论】:

  • 进行基本调试。在调试器中运行您的程序并在运行时检查变量。当然,您可以轻松找出无限循环发生的原因。哪个变量具有导致该值的意外值(实际上只有一个)?您期望该变量值是什么,为什么它不是您期望的值?这些都是基本问题,即使是最简单的调试也可以回答。 How to debug small programs.
  • long int x=rev%10; 之后,rev=rev/10;
  • while(rev!=0) 在这个循环中你永远不会改变rev,那么你怎么期望它变成0
  • @sittsering 是的,我明白了,谢谢 :)

标签: c loops switch-statement infinite-loop


【解决方案1】:

您需要一些能使 "rev!=0" 为真的东西,即在切换结束后 rev = rev / 10。但是创建一个数组并分配零、一、二等并使用索引调用它们可能会更好,我想你可以考虑一下。

#include <stdio.h>
void main(){
long int num,rev=0 ;
printf("Enter any number to print in words: ");
scanf("%ld",&num);
while(num!=0){
    rev=(rev*10)+(num%10);
    num/=10 ;
}
while(rev!=0){
    long int x=rev%10;
    switch(x){
        case 0:
        printf("Zero ");
        break;
        case 1:
        printf("One ");
        break;
        case 2:
        printf("Two ");
        break;
        case 3:
        printf("Three ");
        break;
        case 4:
        printf("Four ");
        break;
        case 5:
        printf("Five ");
        break;
        case 6:
        printf("Six ");
        break;
        case 7:
        printf("Seven ");
        break;
        case 8:
        printf("Eight ");
        break;
        case 9:
        printf("Nine ");
        break;
       }
       rev = rev / 10;
   }
 }

这是数组方法:

#include <stdio.h>
void main(){
long int num,rev=0 ;
printf("Enter any number to print in words: ");

num = 123456789;

const char arr[10][6]= {
    "Zero", "One", "two", "three", "four", "five", "six", "seven", "eight", "nine"
    };

while(num!=0){
    rev=(rev*10)+(num%10);
    num/=10 ;
}
while(rev!=0){
    long int x=rev%10;
    printf("%s ", arr[x]);
    rev = rev / 10;
   }
}

【讨论】:

  • 是的,我知道了,兄弟,感谢您的解决方案 :)
  • 建议const char* arr[] = { "Zero", ... , "Nine" } ;
猜你喜欢
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-27
  • 1970-01-01
相关资源
最近更新 更多