我不明白为什么它在到达行“if(strcmp(next,str2)== 0)return”后立即停止;“
现在我已注释掉%。*因此我可以完整地打印两个字符串,它们在到达if语句之前进行比较,因此5在我的示例输入中无关紧要。我的递归函数有问题
我可以看到字符串“ABC DEF”是不一样的“BC DEFA”,但现在看来,这满足if语句,因为它会停止选取框功能。当我注释if语句时,它会经历无限递归。
也许是同我是这么认为的我印这两个字符串
这表明STRCMP是-1,这不是的STRCMP程序0
有人能告诉我吗?也许我只是错过了一些简单的东西,或者有一种更好的方法来突破我的递归,一旦下一个等于str2。
编辑:我放在旋转功能
int main(){
int n,i,signlength;
char sign[100]; //max 99 letters
//get number of cases
scanf("%d",&n);
//process each case
for(i=0;i<n;i++){
//ignore rest of line \n
char ic;
while ((ic = getc(stdin)) != EOF && ic != '\n');
//take in sign string and length of sign
gets(sign);
scanf("%d",&signlength);
if(signlength >= strlen(sign))
printf("[%-*s]\n",signlength,sign);
if(signlength < strlen(sign)){
printf("%s\n",sign);
//printf("[%.*s]\n",signlength,sign);
marquee(sign,signlength,sign);
}
}
return 0;
}
char* marquee(char* str, int size, char* str2){
char* next = rotate(str);
printf("%s\n",next);
//printf("[%.*s]\n",size,next);
if(strcmp(next,str2) == 0)
return;
return marquee(next,size,str2);
}
void swap(char* a, char* b){
char temp = *a;
*a = *b;
*b = temp;
}
void reverse(char* array, int size){
int i;
for(i=0;i<size/2;i++)
swap(array + i, array + (size-i-1));
}
char* rotate(char* str){
reverse(str +1, strlen(str) -1);
reverse(str, strlen(str));
return str;
}
我不是说你的函数'marquee'可以在这个状态下编译...你确定你在测试什么吗? – purplepsycho
不测试'scanf'的返回值始终是一个惊喜。正如使用弃用的gets()函数一样。改用fgets。噢,当你返回时,会发生什么?'返回'char *'的函数? – Jens
@purplepsycho,不,我不确定。我是C新手,不熟悉如何通过函数进行网格化,所以我最好的办法就是打印所有内容lol – Hispazn