我不知道我是否只是不理解数组或者是什么,但我在过去几个小时内一直在寻找此代码中的问题。当我运行它时,我得到一个无限循环的回报。
以下是代码:
#include <stdio.h>
#include <string.h>
void reverse(char string2Reverse[80], int start, int end);
int main(int argc, char *argv[])
{
char string[80];
int cntr;
for(cntr = 0; cntr < 80; cntr++)
string[cntr] = '\0';
int start = 0, end;
while((scanf("s", string)) != EOF)
{
end = 0;
printf("%s ", string);
while(string[end] != '\0')
end++;
end--;
reverse(string, start, end);
end++;
printf("%s\n\n", string);
for(cntr = 0; cntr < end; cntr++)
string[cntr] = '\0';
}
}
void reverse(char string2Reverse[80], int start, int end)
{
if(string2Reverse[start] != string2Reverse[end] && start != end)
{
char temp = string2Reverse[start];
string2Reverse[start] = string2Reverse[end];
string2Reverse[end] = temp;
reverse(string2Reverse, start + 1, end - 1);
}
}
任何帮助都会很棒!我似乎无法找到我的问题。
答案 0 :(得分:2)
如果end-start不是偶数,那么你将无限循环,因为start will!= end ever ..我也不知道你是否真的想要比较string2Reverse[start] != string2Reverse[end]
那样的,这意味着如果有的话是字符串中有一个'a'的位置,在字符串另一侧的平衡位置还有一个'a',它将终止。试试这个:
void reverse(char string2Reverse[80], int start, int end)
{
if(start < end)
{
char temp = string2Reverse[start];
string2Reverse[start] = string2Reverse[end];
string2Reverse[end] = temp;
reverse(string2Reverse, start + 1, end - 1);
}
}
正如其他人在这里指出的那样,你的scanf中需要“%s”而不是“s”,你现在正在循环的原因是因为结束从-1开始(因为它是零len字符串),所以显然开始增加而结束正在减少,所以你的终止条件永远不会满足。
答案 1 :(得分:1)
scanf
读取字符串的格式为%s
,您似乎错过了百分号。
答案 2 :(得分:1)
while((scanf("s", string)) != EOF)
应该while((scanf("%s", &string)) != EOF)
不要忘记%和&amp;。