1

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

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

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

默认情况下自动C取值。我怎么能阻止它?我也想打印前导零。0011

4

3 回答 3

1

要使用前导零,您可以将字符串作为输入。如果需要,之后,您可以使用atoiou从字符串中提取数字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 */
}
于 2012-11-07T10:52:25.950 回答
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;        
}
于 2012-11-07T11:05:57.623 回答
0

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

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

int const *digits[] = {“零”、“一”、“二”、“三”、“四……、……九”};

字符数[10];

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

如果 ( n )
    printf("\n");

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

于 2012-11-07T11:13:41.850 回答