我不明白爲什麼它在到達行「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