我需要一个C程序,它将使用switch
语句打印输入数字的数字。
例如: - 如果我输入'001'作为值,则应打印zero zero one
作为输出。
我知道如何将数字打印到其他数字的单词,即首先反转数字,然后使用模数运算符提取数字,然后使用开关条件打印单词。
默认情况下,C
会自动将值001
设为1
。我怎么能阻止它?我也想打印前导零。
答案 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");
免责声明:未编译或运行。