前导零 - 以单词形式打印数字

时间:2012-11-07 10:47:20

标签: c int

我需要一个C程序,它将使用switch语句打印输入数字的数字。

例如: - 如果我输入'001'作为值,则应打印zero zero one作为输出。

我知道如何将数字打印到其他数字的单词,即首先反转数字,然后使用模数运算符提取数字,然后使用开关条件打印单词。

默认情况下,C会自动将值001设为1。我怎么能阻止它?我也想打印前导零。

3 个答案:

答案 0 :(得分:1)

要有前导零,可以将字符串作为输入。如果需要,您可以使用atoi ou strto*从字符串中提取数字。

示例:

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

char buf[SIZE];
const char *text_number[] = { 
    "zero", "one", "two", "three", "four", "five", "six", 
    "seven", "eight", "nine"
};

if (fgets(buf, sizeof buf, stdin) != NULL) {
    char *peol = strchr(buf, '\n');

    if (peol != NULL) {
        size_t size = peol - buf; /* assume `peol` is a valid pointer */

        for (i = 0; i < size; ++i) {
            switch (buf[i]) {
            case '0': 
            case '1': 
            case '2': 
            case '3': 
            case '4': 
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
                putchar(text_number[buf[i]]);
                break;
            default:
                /* treat "not a digit" error */
            }
        }
        putchar('\n');
    } else {
        /* treat strchr error */
    }
} else {
    /* treat fgets error */
}

答案 1 :(得分:0)

像字符串一样扫描输入,打印时使用ASCII表示将其作为字母进行扫描,类似这样(只有想法):

int main (void)
{
   char number[ 30 ];
   int i = 0;

   printf( "Enter the number: " );

   /*You should use fgets here for safe scan*/
   scanf( "%s", number );


   while( *( number + i ) != '\0' ){
   switch( *( number + i) ){
      i++;

      /* Cause numbers are stored in their ASCII code*/
      case 48: /* 0 */
         printf('zero');
         break;
      case 49: /* 1 */
         printf('one');
         break;
      case 50: /* 2 */
         printf('two');
         break;
      case 51: /* 3 */
         printf('three');
         break;
      case 52: /* 4 */
         printf('four');
         break;
      case 53: /* 5 */
         printf('five');
         break;
      case 54: /* 6 */
         printf('six');
         break;
      case 55: /* 7 */
         printf('seven');
         break;
      case 56: /* 8 */
         printf('eight');
         break;
      case 57: /* 9 */
          printf('nine');
          break;
      default:
          /*In case you enter a symbol, or a letter enter something here*/
   }
   return 0;        
}

答案 2 :(得分:0)

我注意到需要的话。将字符作为字符串读入数字[]并循环,如下面的片段所示。如果需要,请添加错误检测。你真的需要一个开关吗?以下使用的代码行少得多。

#include "ctype.h"       // isdigit()

int const *digits[] = { "zero", "one", "two", "three", "four...., ...nine" };

char   number[10];

int   n;
for ( n = 0; n < sizeof(number) && isdigit(number[n]); n++ )
{
    printf( "%s%s", n ? " " : "", digits[number[n] - '0'] );
}

if ( n )
    printf("\n");

免责声明:未编译或运行。