gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:12:55 25 4
gpt4 key购买 nike

我已经使用 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

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

我把整个代码放在一起,以防它的其他方面写得不好,如果指出的话,我将不胜感激:)

#include <stdio.h>
#define LEN 1000

void getLine(char[]);
void reverse(char[]);

int main() {
char line[LEN];
getLine(line);
reverse(line);
printf("\n%s\n", line);
return 0;
}

void getLine(char s[]) {
int i, c;
for (i = 0; (c = getchar()) != EOF; ++i) {
s[i] = c;
}
s[i] = '\0';
}

最佳答案

你的代码开始于

while (s[lastIndex] != EOF) {

鉴于这里没有文件读取,EOF(文件结尾)是不正确的。 0 是指字符串的结尾吗?或者更好的是,'\0' 表示字符形式的字符串结尾? (也称为 NUL,但该符号未定义。)

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

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

第一件事:它不再检查NUL。如果您点击 NUL,它会直接闪过它...但是假设输入字符串格式正确,并且它在最终 NUL 之前的最后一个字符是一个'\n',让我们继续吧。

据我了解,您想反转主字符串中每一行的字符。这意味着您需要记住行的开头(很好,在 lastIndex 中 - 可惜这个名字),然后去寻找行的结尾。你正在为此使用 i...

等等:你是边走边换角色吗?当然你应该寻找行尾,然后开始移动 lastIndexi 彼此越来越近,边走边交换?因此,您应该在同一循环内递增 lastIndex递减 i

还是我遗漏了什么?

关于c - 索引在两个嵌套循环中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37896918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com