【发布时间】:2016-06-18 12:25:39
【问题描述】:
我已经使用 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';
}
【问题讨论】:
-
您的代码中存在严重的逻辑错误。请检查。此外,char 数组以 '\0' 而不是 '\n' 结尾。
-
@denis 感谢您的回复。你能再解释一下吗?我也在检查
'\n'的新行。也许我应该用'\0'替换EOF? -
如何定义和初始化传入
reverse()的内容? -
我在
main()和void reverse(char[])之前对其进行了原型设计。我还定义了一个函数getLine(char s[], int len),它使用getchar()用输入字符填充给定的数组。然后我用reverse(s)调用函数。 -
遵循以下逻辑:
for (i = 0; (c = getchar()) != EOF; ++i)和EOF不 存储在数组line中。所以在reverse()中测试它是没有用的。getline()使用s[i] = '\0';放置一个尾随'\0'作为字符串结束标记,即0-终止符,以使char-arrayline成为C-“字符串”。
标签: c arrays indexing c-strings