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[] = {“零”、“一”、“二”、“三”、“四……、……九”}; 字符数[10]; 诠释n; for ( n = 0; n < sizeof(number) && isdigit(number[n]); n++ ) { printf( "%s%s", n ? " " : "", digits[number[n] - '0'] ); } 如果 ( n ) printf("\n");
免责声明:未编译或运行。