0

我不知道我是不是不懂数组还是什么,但过去几个小时我一直在寻找这段代码中的问题。当我运行它时,我得到一个无限循环的返回。

这是代码:

#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);
    }
}

任何帮助都是极好的!我似乎找不到我的问题。

4

3 回答 3

2

如果 end-start 不均匀,您将无限循环,因为 start 将 != 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”,您现在循环的原因是因为 end 以 -1 开头(因为它是零 len 字符串),所以很明显,开始在增加,结束在减少,所以你的终止条件从未满足。

于 2012-10-17T19:15:03.463 回答
1

while((scanf("s", string)) != EOF)应该while((scanf("%s", &string)) != EOF)不要忘记 % 和 &。

于 2012-10-17T19:16:04.360 回答
1

scanf读取字符串的格式是%s,看来您缺少百分号。

于 2012-10-17T19:12:38.380 回答