


Программирование на языке "C"
Написал программу на языке си, котрая печатает самую длиную строку без каких либо ограничений на размер. Вот, собственно, и она:
#include <stdio.h>
#define MAXLINE 10 // максимальный размер вводимой строки
int getlin(char line[], int MAX);
void copy(char to[], char from[]);
/*печать самой длинной строки*/
int main()
{
int len; //длина текущей строки
int max; //длина максимальной из просмотренных строк
char line[MAXLINE]; //текущая строка
char longest[MAXLINE]; //самая длинная строка
int c;
max=0;
while((len=getlin(line, MAXLINE))>0)
{
if(line[len-1] != '\n')
while((c=getchar())!=EOF && c!='\n')
len++;
if(len>max)
{
max=len;
copy(longest, line);
}
}
if(max<MAXLINE) // вычитаем нулевой символ вставленный в getlin
max--;
if(max>0)
{
printf("Самая длинная строка\n");
if(max>MAXLINE)
printf("%s...\n", longest);
else
printf("%s\n", longest);
}
printf("длинa строки - %d символов\n", max);
return 0;
}
/*getlin читает строку в s, возвращает длину*/
int getlin(char s[], int lim)
{
int c, i;
for(i=0; i<lim-1 && (c=getchar()) != EOF && c!='\n'; i++)
s[i]=c;
if(c=='\n')
{
s[i]=c;
i++;
}
s[i] = '\0';
return i;
}
void copy(char to[], char from[])
{
int i;
i=0;
while((to[i] = from[i]) != '\0')
i++;
}
НО! Когда ее откомпилировал, и запускаю, и пишу туда, собственно, символы, ничего не проиходит. То есть не идет подчет и вывод, то бишь, "Самая длинная сторока" и "Длина строки". Что я сделал не то?
Вроде код правильный.
#include <stdio.h>
#define BUFFER 256
int length(char*);
char* max_string(char*);
void copy(char*, char*);
int main(void) {
int n = 2;
char mx_str[BUFFER];
do {
char str[BUFFER];
char* tmp;
printf("String: ");
gets_s(str, BUFFER);
tmp = max_string(str);
if (tmp) copy(mx_str, tmp);
} while (--n);
printf("Longest: ");
puts(mx_str);
fflush(stdin);
getchar();
return 0;
}
int length(char* s) {
int n = 0;
while (s[n]) ++n;
return n;
}
char* max_string(char* s) {
static max_len = 0;
int len = length(s);
if (len > max_len) {
max_len = len;
return s;
}
return NULL;
}
void copy(char* dest, char* src) {
int i = 0;
while (src[i]) {
dest[i] = src[i];
++i;
}
dest[i] = 0;
}