2个回答
展开全部
你的程序首先只读取一个字符,解决办法有2个:
方法一:
在循环里面,最下面,再增加一个scanf语句,这时候注意判断结束时,不是'\0',而应该是回车符'\n'。
方法二:
定义字符串变量str,使用scanfs("%s", str)直接读取一行,放在字符串里,再对该字符串进行逐字符解析。此时,使用\0来判断是否为结束符(或者使用strlen)。(注意scanfs("%s", str)函数是危险的,你定义的字符串变量的长度必须足够大)
char str[100];
int i;
scanf("%s", str);
for (; str[i] != '\0'; i++) {
}
另外你这样写,最后多了一个空格
解决最后空格的问题,简单来讲,有两种方法:
方法一:不直接输出,而是暂存到一个字符串里:
char buff[1024];
buff[0] = 0;
/* 在switch/case里面,替换printf为strcat */
strcat(buff, "ling ");
/* 最后取消最后的空格并输出 */
buff[strlen(buff)-1] = 0;
printf("%s\n", buff);
方法二:定义一个标志位,并置为0,只要有输出,马上置为1。输出前,判断标志位是否为0,不是0则先输出一个空格。
char a;
int flag = 0;
int n;
/* 为方便起见,我们在这里先定义数组,不再使用swtich/case语句 */
char *str[10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
scanf("%c", &a);
for (; a!='\n';)
{
/* 在这里判断一下a的范围是否是'0'-'9',并将其转变成数字 */
if (a >= '0' && a<='9')
{
n = a-'0';
if (flag == 1) printf(" "); /* 先输出一个空格 */
printf("%s", str[n]);
flag = 1;
}
else
{
/* 是否需要输出一些错误信息? */
}
scanf("%c", &a);
}
}
展开全部
#include<stdio.h>
#include<string.h>
int main(){
char a[1000];
int i=0;
scanf("%s",a);
while(a[i]!='\0'){
switch(a[i++]){
case '0':printf("ling ");break;
case '1':printf("yi ");break;
case '2':printf("er ");break;
case '3':printf("san ");break;
case '4':printf("si ");break;
case '5':printf("wu ");break;
case '6':printf("liu ");break;
case '7':printf("qi ");break;
case '8':printf("ba ");break;
case '9':printf("jiu ");break;
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询