我需要一個C程序,它將使用switch
語句打印輸入數字的數字。前導零 - 打印數字的單詞數字
例如: - 如果我輸入'001'作爲值,則應打印zero zero one
作爲輸出。
我知道如何將數字打印到其他數字的單詞中,即首先反轉數字,然後使用模數運算符提取數字,然後使用切換條件打印單詞。
默認C
自動取001
作爲1
。我怎麼能阻止呢?我也想打印前導零。
我需要一個C程序,它將使用switch
語句打印輸入數字的數字。前導零 - 打印數字的單詞數字
例如: - 如果我輸入'001'作爲值,則應打印zero zero one
作爲輸出。
我知道如何將數字打印到其他數字的單詞中,即首先反轉數字,然後使用模數運算符提取數字,然後使用切換條件打印單詞。
默認C
自動取001
作爲1
。我怎麼能阻止呢?我也想打印前導零。
要有前導零,你可以接受一個字符串作爲輸入。如果你想,之後,你可以從你的字符串中提取數字atoi
或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;
}
0)使用''0'而不是'48'1)添加一些'break;'s 2)也許增加'i'。 3)'number [i]'與你的'*(number + i)'相同' – wildplasser
我只想說一些與你不同的東西,我用十進制Ascii表示,回答與你沒有的東西相同的東西值 –
關鍵是'0'符號也適用於非ascii系統。另外它對人類更具可讀性;甚至超過了'0x30'。注意:在*使用第一個十進制字符之前,您會增加i *。 – wildplasser
我注意到,字是需要的。以字符串的形式將字符讀入數字[]並循環,如下面的片段所示。如果需要,請添加錯誤檢測。你真的需要開關嗎?以下使用更少的代碼行。
#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");
免責聲明:未編譯或運行。
這是C還是C#? – kennytm
@KennyTM它的C .. – Nigel