c语言 - 索引在两个嵌套循环中不起作用



我已经与Python进行了编码,大约一年了,并且决定也学习C。我试图编写一个函数,以通过行(k& r)扭转给定的字符阵列。这是代码:

void reverse(char s[]) {
    int i, lastIndex, tempLetter1, tempLetter2;
    i = lastIndex = 0;
    while (s[lastIndex] != EOF) {
        while (s[lastIndex] != 'n') {
            i = lastIndex;
            tempLetter2 = s[i];
            while (s[i] != 'n') {
                tempLetter1 = tempLetter2;
                tempLetter2 = s[i + 1];
                s[i + 1] = tempLetter1;
                ++i;
            }
            ++lastIndex;
        }
        ++lastIndex;
    }
}

这最终以无限的循环结束。我在第二个循环中插入了一些打印代码:

printf("s[0] = ");
putchar(s[0]);
printf("ns[1] = ");
putchar(s[1]);
printf("ns[2] = ");
putchar(s[2]);

它们都包含输入数组的第一个字符(Hello World)。

s[0] = H
s[1] = H
s[2] = H

我也省略了第一个循环时,但仍然没有起作用。尽管索引在循环外工作正常。第三个循环也有效。

,我将整个代码放在了它的其他方面,如果指出的话,我会很感激:)

#include <stdio.h>
#define LEN 1000
void getLine(char[]);
void reverse(char[]);
int main() {
    char line[LEN];
    getLine(line);
    reverse(line);
    printf("n%sn", line);
    return 0;
}
void getLine(char s[]) {
    int i, c;
    for (i = 0; (c = getchar()) != EOF; ++i) {
        s[i] = c;
    }
    s[i] = '';
}

您的代码从

开始
while (s[lastIndex] != EOF) {

鉴于这里没有文件阅读,因此EOF(文件结尾)是不正确的。您的意思是0,这意味着字符串的结尾吗?还是更好的是,''表示字符形式的终止?(也称为NUL,但没有定义该符号。)

好吧,假设s的第一个字符不是EOF,则立即进入第二个循环:

while (s[lastIndex] != 'n') {

第一件事:不再检查NUL。如果您击中NUL,它将直接驶过它...但是假设输入字符串是构成良好的,并且最终NUL之前的最后一个字符是'n',让我们继续前进。

我理解,您想扭转主字符串中每一行中的字符。这意味着您需要记住行的开头(好的,这是在lastIndex中 - 对名字的可惜),然后去寻找行的结尾。您正在使用i ...

坚持下:您随身携带角色吗?当然,您应该寻找行的末端,然后开始移动lastIndex,然后将i靠近,彼此靠近,随着您而交换?因此,您应该在同一环路内部递增 lastIndex降低 i

还是我错过了什么?

最新更新