/*
https://bbs.bccn.net/thread-443875-1-1.html
题目内容:
你的程序要读入一个整数,范围是[-100000,100000]。然后,用汉语拼音将这个整数的每一位输出出来。
如输入1234,则输出:
yi er san si
注意,每个字的拼音之间有一个空格,但是最后的字后面没有空格。当遇到负数时,在输出的开头加上“fu”,如-2341输出为:
fu er san si yi
输入格式:
一个整数,范围是[-100000,100000]。
输出格式:
表示这个整数的每一位数字的汉语拼音,每一位数字的拼音之间以空格分隔,末尾没有空格。
输入样例:
-30
输出样例:
fu san ling
*/
#include <stdio.h>
#include <stdlib.h>
const char* PY_NumberList[] = { "ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu", "fu" };
int GetInteger(int* ptrValue, int lowLimit, int highLimit);
int main(void)
{
int value;
char str[6];
int index;
// 用空格初始化数组
for (index = 0; index < _countof(str); ++index)
{
str[index] = ' ';
}
/*************************************
使用旧编译器的,把printf_s()和scanf_s()改回为printf()和scanf()
**************************************/
// 与用户交互读入数据
while (!GetInteger(&value, -100000, 100000))
{
printf_s("Please input correct integer\n");
}
printf_s("Your input integer is: %d\n", value);
// 处理数据
if (value < 0)
{
printf_s("%s ", PY_NumberList[10]);
value = -value;
}
for (index = _countof(str) - 1; index >= 0; --index)
{
str[index] = value % 10;
value /= 10;
// 下面if()的写法,在输入数据为零时起作用
if (value == 0)
{
break;
}
}
// 输出整理后的结果
for (index = 0; index < _countof(str); ++index)
{
if (str[index] != ' ')
{
printf_s("%s", PY_NumberList[str[index]]);
if (index < _countof(str) - 1) // 最后一项不输出空格
{
putchar(' ');
}
}
}
fflush(stdin);
getchar();
return EXIT_SUCCESS;
}
// 读取一个指定上下边界的整数,返回讀取是否成功的逻辑值
// 注:1.在新标准中返回值应使用bool数据类型,此处用int是兼容旧习惯
// 2.参数ptrValue是一个指向整型数据的指针,此处与scanf()必须用取地址符的用法是相同的,后者内部就是这样做的
int GetInteger(int* ptrValue, int lowLimit, int highLimit)
{
fflush(stdin); // 清除输入緩衝區中的残存数据,若无此语句,则输入非数字时会阻塞输入导致死循环
return (scanf_s("%d", ptrValue) == 1) && (*ptrValue >= lowLimit) && (*ptrValue <= highLimit);
}
[
本帖最后由 TonyDeng 于 2015-4-15 00:29 编辑 ]