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[] = { "0", "1", "2", "3", "4...., ...9" };

文字番号[10];

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

もし ( n )
    printf("\n");

免責事項: コンパイルも実行もされていません。

于 2012-11-07T11:13:41.850 に答える