新手一个C语言问题 循环调用指针函数出差 求大家帮忙解答

比如我输入2得到一个随机字符串IE要求输入同样的字符串会显示出正确率等等然后错误的字符串会读取出来要求重新输入我重新调入函数的时候会出现溢出望大家帮忙解答#include... 比如我输入2得到一个随机字符串 IE
要求输入同样的字符串 会显示出正确率等等
然后错误的字符串会读取出来要求重新输入
我重新调入函数的时候会出现溢出
望大家帮忙解答

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<string.h>
char* cpstr(char *x){
char i[10000];
char *pi;
pi=NULL;
pi=i;
printf("请输入字符串\n");
for(;;){
gets(pi);
if(*pi==NULL){
fflush(stdin);
continue;
}
else
break;

}
int size=strlen(x);
//printf("zifuchangdu:%d",size);
int sum_right=0;
int sum_wrong;
char wrong[10000];
char *pwrong;
pwrong=NULL;
pwrong=wrong;

int total_wrong=0;
for(int j=0;j<size;j++){
if((int)*(pi+j)==(int)*(x+j)){
sum_right=sum_right+1;
}
else{
*(pwrong+total_wrong)=*(x+j) ;
total_wrong=total_wrong+1;
}
}
sum_wrong=size-sum_right;
int sum_out;

int size2=strlen(pi);
//printf("changdu%d",size2);
if(size2>size)
sum_out=size2-size;
else
sum_out=0;

printf("正确个数为%d个\n",sum_right);
printf("错误个数为%d个\n",sum_wrong);
printf("超出个数为%d个\n",sum_out);
float x1,x2;
x1=1-((float)sum_wrong+(float)sum_out)/(float)size2;
x2=(float)sum_right/(float)size;
if(size2>size)
printf("正确率为百分之%f\n",x1*100);
else
printf("正确率为百分之%f\n",x2*100);

*(pwrong+total_wrong)='\0';

if(total_wrong>0){
printf("错误的字符为:");
for(int k=0;k<total_wrong;k++){
printf("%c",*(pwrong+k));
}
printf("\n请重新输入输入错误的字符串:\n");
}
if(total_wrong>=0)
return pwrong;

return '\0';
}

int main(){
int MAX;
printf("请输入您想输入的字符位数:");

for(;;){
scanf("%d",&MAX);
if(getchar()!='\n'){
printf("输入错误,请重新输入您想输入的字符位数:");
fflush(stdin);
continue;
}
else{
printf("您需要打出的字符为:\n");
break;
}
}
char *pstr=(char*)malloc(sizeof(char)*(MAX+1));
for(int i=0;i<MAX;i++){
*(pstr+i)=char (rand()%(126-32+1)+32);
printf("%c",*(pstr+i));
}
if(NULL == pstr)
return -1;
printf("\n");
*(pstr+MAX)='\0';
char *wrong=cpstr(pstr);
// printf("changdu%d\n",strlen(cpstr(pstr)));
// *(wrong+strlen(cpstr(pstr)))='\0';
for(;;){
if(*wrong=='\0'){
return 1;
}
else
cpstr(wrong);
wrong=NULL;
}
wrong=NULL;
free(pstr);
pstr=NULL;
return 0;
}
代码写的有点乱 新手 不好意思
展开
 我来答
百度网友746d508
2013-07-28 · TA获得超过578个赞
知道小有建树答主
回答量:215
采纳率:0%
帮助的人:179万
展开全部
	for(;;){
if(*wrong=='\0'){
return 1;
}
else
cpstr(wrong);
wrong=NULL;//错误,把这句删了就可以了
}
追问
我为了返回输入错误的字符再重新输入才加的这一句的  知道所有字符输入正确才结束  问问怎么改才可以?
追答
不太明白你想达到什么效果.
返回输入错误的字符的话可以在判断字符函数里用malloc再申请一块内存,用来存放错误的字符.
把内存的首地址返回出去.记得在main函数里用完后要free掉.
wrong里的东西不要改变他,这是用来判断字符正确与否的标准,你怎么能用NULL赋给它呢.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zizhuan07
2013-07-27
知道答主
回答量:24
采纳率:0%
帮助的人:12.8万
展开全部
看起来好长。比我要厉害
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
是致命的背叛
2013-07-29
知道答主
回答量:46
采纳率:0%
帮助的人:3.5万
展开全部
去委屈委屈
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式