C语言拼音打字程序问题

程序功能:实现输入一个拼音回车后把该拼音的所有汉字输出来,并且每个汉字都有一个序号,下一步请输入一个序号,如果这个序号有相应的字符,则根据这个序号把相应的汉字输出来,否则输出找不到。如果输入的拼音没有汉字库则输出对不起,没有找到该拼音的字库。

下面一拼音wo做了一个程序,不过程序有一些错误,谁来完善一下?

#include<stdio.h>
#include<string.h>
void main()

{
char wo[]={"wo"};
char wo_ch[]={"挝莴涡窝蜗倭踒喔我肟沃卧偓握幄渥龌涴硪斡"};
//char str_input[3];
unsigned int i=0,str_ch_len=strlen(wo_ch);
printf("模仿拼音输入法\n");
printf("请输入拼音wo\n");
//scanf("%s",str_input);
char str_input[3];
gets(str_input);//输入拼音
if(str_input==wo)
{

for(i=0;i<str_ch_len;i++)
printf("%d.%c "i,wo_ch[i]);
last: printf("请输入对应的序号选字:");

scanf("%d" &i);
if (i>str_ch_len)
{
printf("你要选的字符不存在\n");
goto last;
}
else
{
printf("%c",wo_ch[i]);
}

}
else
{
printf("对不起,没有找到该拼音的字库\n");

}

}
练习题啊,快来帮忙。
如果哪位可以指出该代码的每一处错误原因并提供修改方法,追加20分以上。

//这段程序错误太多,而且代码风格太乱;

//不过估计您是个初学者,就帮你的程序按你思路修改了

//运行结果如下:

模仿拼音输入法

请输入拼音wo

wo

0.挝 1.莴 2.涡 3.窝 4.蜗 5.倭 6.踒 7.喔 8.我 9.肟 10.沃 11.卧 12.偓 13.握 14.幄

15.渥 16.龌 17.涴 18.硪 19.斡 请输入对应的序号选字:2

//修改后程序如下,希望对你有用!

#include<stdio.h>

#include<string.h>

int main() //是int还是void,根据编译器,我用的是CodeBlocks需要用int

{

    char wo[]= {"wo"};

    char wo_ch[]= {"挝莴涡窝蜗倭踒喔我肟沃卧偓握幄渥龌涴硪斡"};

    printf("%d:%s\n", strlen(wo_ch), wo_ch);

    //char str_input[3];

    unsigned int i=0,str_ch_len=strlen(wo_ch);

    printf("模仿拼音输入法\n");

    printf("请输入拼音wo\n");

    //scanf("%s",str_input);

    char str_input[3];

    gets(str_input);//输入拼音

    //if(str_input==wo)//修改如下(字符串是不能直接比较的!)

    if (0==strcmp(str_input,wo))

    {

        for(i=0; i<str_ch_len; i+=2)

            //printf("%d.%c "i,wo_ch[i]); //修改如下(双引号之后应该有,号)

            printf("%d.%c%c ",i/2,wo_ch[i],wo_ch[i+1]);

last:

        printf("请输入对应的序号选字:");

        //scanf("%d" &i); //修改如下

        unsigned int n;

        scanf("%u", &n);

        if (2*n>str_ch_len)

        {

            printf("你要选的字符不存在\n");

            goto last;

        }

        else

        {

            printf("%c%c",wo_ch[2*n],wo_ch[2*n+1]);

        }

    }

    else

    {

        printf("对不起,没有找到该拼音的字库\n");

    }

    return 0;//如果主函数是void,删除此行!

}

追问

你做得不错!按照要求我会给你加分,但是怎么我的VC编译时这个错误还那么多?有11处错误。

追答

你把VC中自带的头文件留着,再把我给你的程序加进去,可能是VC编译器需要几个特定的头文件,你试试吧!
1. 把 int main() 改成 void main()
2. 删除 return 0;这一句。
其实我在注释里已经说明了,不同编译器,对main()函数的返回类型不一样。
下面是调整了一下风格的版本,你试一下,如果还有错误请把错误信息粘上来,我帮你分析是怎么回事。代码如下:
#include
#include
#include

//int main() //是int还是void,根据编译器,我用的是CodeBlocks需要用int
void main()
{
char wo[]= {"wo"};
char wo_ch[]= {"挝莴涡窝蜗倭踒喔我肟沃卧偓握幄渥龌涴硪斡"};
unsigned int i = 0;
unsigned str_ch_len = strlen(wo_ch);

printf("模仿拼音输入法\n");
printf("请输入拼音wo\n");

char str_input[3];
gets(str_input);//输入拼音

if (0 == strcmp(str_input,wo))
{
for(i=0; i= str_ch_len)
{
printf("你要选的字符不存在\n");
break;
}
else
printf("%c%c\n",wo_ch[2*n], wo_ch[2*n+1]);
}

}
else
printf("对不起,没有找到该拼音的字库\n");
//return 0;//如果主函数是void,删除此行!
}
希望对您有用!!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-21
if(str_input==wo)这句有错误,可以为
if (strcmp(str_input,wo)==0)
当然之前也可以加了预处理,将所有输入都变成小写字母,这样可提高程序的兼容性。
第2个回答  2011-05-21
if(str_input==wo)这句有错误,可以为
if (strcmp(str_input,wo)==0)
当然之前也可以加了预处理,将所有输入都变成小写字母,这样可提高程序的兼容性。
相似回答