新手一个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;
}
代码写的有点乱 新手 不好意思 展开
要求输入同样的字符串 会显示出正确率等等
然后错误的字符串会读取出来要求重新输入
我重新调入函数的时候会出现溢出
望大家帮忙解答
#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;
}
代码写的有点乱 新手 不好意思 展开
3个回答
展开全部
for(;;){
if(*wrong=='\0'){
return 1;
}
else
cpstr(wrong);
wrong=NULL;//错误,把这句删了就可以了
}
追问
我为了返回输入错误的字符再重新输入才加的这一句的 知道所有字符输入正确才结束 问问怎么改才可以?
追答
不太明白你想达到什么效果.
返回输入错误的字符的话可以在判断字符函数里用malloc再申请一块内存,用来存放错误的字符.
把内存的首地址返回出去.记得在main函数里用完后要free掉.
wrong里的东西不要改变他,这是用来判断字符正确与否的标准,你怎么能用NULL赋给它呢.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看起来好长。比我要厉害
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询