switch为什么不能用的?

huanxiangshu 2012-02-15 01:26:28
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define heng 100
void compare(char *str[][20],int k);
void adjust(char *str[][20],int k);
main()
{
int n,i;
char choose1,choose2,*str[heng][20];
do
{
printf("CONTINUE?YES请按Y No请按N");
scanf(" %c",&choose1);
if(choose1==89||choose1==121)
{
printf("请输入将要输入字符串的个数:");
scanf("%d",&n);
printf("您将输入%d个字符串\n",n);
printf("请输入将要输入的字符串:\n");
for(i=0;i<n;i++)
{
scanf("%s",str);
printf("%s\n",*str);
}
do
{
printf("\nA对以上字符串进行排序请选2");
printf("\nB对以上字符串是否有\"回文\"进行判断请选3");
printf("\nC同时进行AB两项请选4");
printf("\nD退出请选0\n");

choose2=getche();
switch(choose2)
{
case'2':
printf("比较后结果是:\n");
compare(str,n);
break;
case'3':
printf("判断后结果是:\n");
adjust(str,n);
break;

case'0':
printf("您已退出菜单。\n");
break;

default:
printf("您未作出正确选择!请重新选择。\n");
}
}while(choose2==48);
printf("\n您已完成所选项目!");
}

else if((choose1==78)||(choose1==110))
{
printf("您已退出菜单!\n");

}
else
printf("\n您未作出正确选择!请重新选择Y或N.\n");
}while((choose2!=89)&&(choose2!=121)&&(choose2!=78)&&(choose2!=110));

}

void compare(char *str[][20],int k)
{
int i,j;
char *temp=NULL;
for(i=0;i<(k-1);i++)
{
for(j=i+1;j<k;j++)
{
if(strcmp(str[i][20],str[j][20])>0)
{
*temp=*str[i][20];
*str[i][20]=*str[j][20];
*str[j][20]=*temp;
}
}
printf("%s",str[i][20]);
printf("\n");
}
printf("%s",str[i][20]);
printf("\n");
}

void adjust(char *str[][20],int k)
{
int i,j,len;
for(i=0;i<k;i++)
{
len=strlen(str[i][20]);
for(j=0;j<=(len/2);j++)
{
if(*str[i][j]!=*str[i][len-j])
break;
else
printf("%s是\"回文\"字符串\n",str[i][len+1]);
}
}
}
在switch语句就不能进行了,求解!
...全文
222 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
面包大师 2012-02-15
  • 打赏
  • 举报
回复
上面是比较算法,没有比较后的输出,下面是比较后的输出
	for (i=0;i<k;i++)
{
printf("%s\n",str[i]);
}
面包大师 2012-02-15
  • 打赏
  • 举报
回复
void compare(char *str[][20],int k)
{
int i,j;
char *temp=(char *)malloc(20);
for(i=0;i<(k-1);i++)
{
for(j=0;j<k-i-1;j++)
{
if(strcmp(str[j],str[j+1])>0)
{
memcpy(temp, str[j], 20);
memcpy(str[j], str[j+1], 20);
memcpy(str[j+1], temp, 20);
}
}
}
}
面包大师 2012-02-15
  • 打赏
  • 举报
回复
			for(i=0;i<n;i++)//你的输入改下
{
memset(str[i], 0, 20);
scanf("%s",str[i]);
printf("%s\n",str[i]);
}
IVERS0N 2012-02-15
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 huanxiangshu 的回复:]

问题描述:
设有若干个字符串,这些字符串存储位置的首地址保存在指针数组中(即字符串用指向字符的指针变量表示)。
实现要求:
⑴ 实现字符串的输入和输出;
⑵ 对所有的字符串按从小到大的顺序排序,即指针数组中的第一个元素指向最小的字符串,第二个元素指向次小的字符串…,依次类推;
⑶ 判断这些字符串中是否有“回文”,所谓“回文”指的是顺读和倒读都是一样的字符串;
⑷ 设计一个菜单,具有上……
[/Quote]

指针数组应该是char *str[20];这样定义 数组里存着20个char*指针
huanxiangshu 2012-02-15
  • 打赏
  • 举报
回复
问题描述:
设有若干个字符串,这些字符串存储位置的首地址保存在指针数组中(即字符串用指向字符的指针变量表示)。
实现要求:
⑴ 实现字符串的输入和输出;
⑵ 对所有的字符串按从小到大的顺序排序,即指针数组中的第一个元素指向最小的字符串,第二个元素指向次小的字符串…,依次类推;
⑶ 判断这些字符串中是否有“回文”,所谓“回文”指的是顺读和倒读都是一样的字符串;
⑷ 设计一个菜单,具有上述规定的操作要求、退出系统等最基本的功能。
这是原题目。
IVERS0N 2012-02-15
  • 打赏
  • 举报
回复
没必要用 *str[heng][20] 把 str[heng][20]就够了
huanxiangshu 2012-02-15
  • 打赏
  • 举报
回复
我输入0可以进行下一步,应该switch没有问题,是case ‘2’的子函数有问题。谢谢你啊!
面包大师 2012-02-15
  • 打赏
  • 举报
回复
那现在switch还有没有问题?
huanxiangshu 2012-02-15
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define heng 100
void compare(char *str[][20],int k);
void adjust(char *str[][20],int k);
main()
{
int n,i;
char choose1,choose2,*str[heng][20];
do
{
printf("CONTINUE?YES请按Y No请按N");
scanf(" %c",&choose1);
if(choose1==89||choose1==121)
{
printf("请输入将要输入字符串的个数:");
scanf("%d",&n);
printf("您将输入%d个字符串\n",n);
printf("请输入将要输入的字符串:\n");
for(i=0;i<n;i++)
{
scanf("%s",str);
printf("%s\n",*str);
}
do
{
printf("\nA对以上字符串进行排序请选2");
printf("\nB对以上字符串是否有\"回文\"进行判断请选3");
printf("\nC返回上一层请选0\n");
getchar();
choose2=getchar();
switch(choose2)
{
case'2':
printf("比较后结果是:\n");
compare(str,n);
break;
case'3':
printf("判断后结果是:\n");
adjust(str,n);
break;

case'0':
printf("您已退出菜单。\n");
break;

default:
printf("您未作出正确选择!请重新选择。\n");
}
}while(choose2!=0);
}

else if((choose1==78)||(choose1==110))
{
printf("您已退出菜单!\n");

}
else
printf("\n您未作出正确选择!请重新选择Y或N.\n");
}while((choose2!=89)&&(choose2!=121)&&(choose2!=78)&&(choose2!=110));

}

void compare(char *str[][20],int k)
{
int i,j;
char *temp=NULL;
for(i=0;i<(k-1);i++)
{
for(j=i+1;j<k;j++)
{
if(strcmp(str[i][20],str[j][20])>0)
{
*temp=*str[i][20];
*str[i][20]=*str[j][20];
*str[j][20]=*temp;
}
}
printf("%s",str[i][20]);
printf("\n");
}
printf("%s",str[i][20]);
printf("\n");
}


void adjust(char *str[][20],int k)
{
int i,j,len;
for(i=0;i<k;i++)
{
len=strlen(str[i][20]);
for(j=0;j<=(len/2);j++)
{
if(*str[i][j]!=*str[i][len-j])
break;
else
printf("%s是\"回文\"字符串\n",str[i][len+1]);
}
}
}我还修改了其他的错误,还是不行,我把红色部分放进另一个简单程序检验,好像是函数有错。
面包大师 2012-02-15
  • 打赏
  • 举报
回复
default:
printf("您未作出正确选择!请重新选择。\n");
}
}while(choose2!=48);//楼主,这儿改成不等号
printf("\n您已完成所选项目!");
huanxiangshu 2012-02-15
  • 打赏
  • 举报
回复
我试过改了,可是只有输入0是可以继续,输入2或3就不行,我的函数有错是吗
hhq201 2012-02-15
  • 打赏
  • 举报
回复
while(choose2!=48);//再次你这儿要改成不等于0则继续循环而不是等于

+1
面包大师 2012-02-15
  • 打赏
  • 举报
回复
			}while(choose2!=48);//再次你这儿要改成不等于0则继续循环而不是等于
printf("\n您已完成所选项目!");
面包大师 2012-02-15
  • 打赏
  • 举报
回复
				getchar();//首先在这儿清空一下缓冲区
choose2=getchar();
huanxiangshu 2012-02-15
  • 打赏
  • 举报
回复
有输入哦 用choose2=getchar();也不行啊!
面包大师 2012-02-15
  • 打赏
  • 举报
回复
choose2=getchar();//..........................
luciferisnotsatan 2012-02-15
  • 打赏
  • 举报
回复
choose2=getche();
你有没有进行输入呀?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧