В настоящее время практикующий Язык программирования C книгу БРАЙАН В. КЕРНИГАН ДЕННИС М. РИТЧИ, и следующая программа должна вывести самое длинное слово. Я не вижу, что не так в моей программе, был бы признателен, если бы мне помогли обнаружить.
#include <stdio.h>
#define MAXLINE 1000
int getLine(char line[], int maxLine);
void copy(char to[], char from[]);
int main() {
int len;
int max;
char line[MAXLINE];
char longest[MAXLINE];
max = 0;
while((len = getLine(line, MAXLINE)) > 0) {
if (len > max) {
len = max;
copy(longest, line);
}
if (max > 0)
printf("Longest line is: %s ", longest);
return 0;
}
}
int getLine(char line[], int maxLine) {
int c, i;
// satir icin ongorulen maksimum harf sayisi asilmadikca
// we birsonraki karakter de EOF veya newline degilse
for(i = 0; (i < maxLine - 1) && ((c = getchar()) != EOF && c != '\n'); ++i) {
line[i] = c;
}
if (c == '\n') {
line[i] = c;
++i;
}
line[i] = '\0';
return i;
}
void copy(char to[], char from[]) {
int i;
i = 0;
while((to[i] = from[i]) != '\0')
++i;
}
Скомпилировал и запустил? Не знаю, что мне делать дальше с такой базовой программой на C :)
Чтобы отлаживать простые программы, подобные этой, вы должны прочитать ее и проанализировать каждый шаг (возможно, распечатать переменные в некоторых точках), чтобы найти проблему.
Отладка бедняги заключается в том, чтобы разместить printf
в стратегических местах. В Windows я считаю, что свободно доступная Visual Studio очень полезна для отладки. Другие интегрированные среды разработки, такие как eclipse, имеют аналогичные интерфейсы отладки. Используя gcc и редактор, вы должны изучить команды gdb, которые менее удобны, но столь же эффективны.
(Продвинутый) Угловые случаи: код имеет проблемы, когда maxLine < 2
как c
не инициализирован в if (c == '\n')
(предположить int c = 0;
), а line[i]
- это UB с патологическим случаем, если maxLine < 1
(предложите начальный if (maxline < 1) return 0;
).
в этой части вашего кода:
max = 0;
while((len = getLine(line, MAXLINE)) > 0) {
if (len > max) {
len = max;
copy(longest, line);
}
max
- это в начале 0
. в условии if вы назначаете len
как max
, то есть 0
. Есть еще одна проблема: программа вернет 0 после первой итерации вашего while
, потому что вы поместили в нее return 0
.
да, это выглядит проблемой, хотя, как сказал Мухаммед, вы можете попробовать изменить, например, while((len = getLine(line, MAXLINE)) > 0) { if (len > max) { max =len copy(longest, line); } } if (max > 0) { printf("Longest line is: %s ", longest); }
I cannot see what is wrong in my program
.. проявите пожалуйста свои усилия .. что вы пробовали для отладки?