Я кодировал 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
@denis Спасибо за ответ. Не могли бы вы объяснить немного больше? Я также проверяю новую строку с '' \ n''. Возможно, я должен заменить 'EOF'' '\ 0''? – keyan3d
Как вы определяете и инициализируете то, что передается в 'reverse()'? – alk