switch
ステートメントを使用して、入力された数字の数字を出力する C プログラムが必要です。
例:- 値として「001」を入力するzero zero one
と、出力として出力されます。
数字を他の数字の単語に出力する方法を知っています。つまり、最初に数字を逆にしてから、モジュラス演算子を使用して数字を抽出し、次にスイッチ条件を使用して単語を出力します。
デフォルトC
では、値001
は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 */
}
文字列のように入力をスキャンし、印刷中に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;
}
言葉が欲しいことに気づきます。文字を文字列として 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");
免責事項: コンパイルも実行もされていません。