* 여러 행을 읽어서 그 중 문자가 가장 긴 행을 출력하는 프로그램을 작성한다.
프로그램 개요
while(읽을 행이 있으면)
if(지금 읽는 행이 지금까지 가장 길었던 행보다 길면)
그 행과 행의 길이를 기억
가장 긴 행을 출력
#include <stdio.h>
#define MAXLINE 1000 // 행의 최대 문자 길이 지정
int getline( char line[], int maxline );
void copy( char to[], char from[] );
/* print longest input line */
main(){
int len;
int max;
char line[MAXLINE];
char longest[MAXLINE];
max = 0;
while( ( len = getline( line, MAXLINE ) ) > 0 )
if( len > max ){
max = len;
copy( longest, line );
}
if( max > 0 )
printf( "%d %s", max, longest );
return 0;
}
/* getline: s배열로 행을 읽고, 길이 반환 */
int getline( 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;
}
/* copy: from 배열을 to 배열로 복사; 크기가 너무 크지 않은지 확인 */
void copy( char to[], char from[] ){
int i;
i = 0;
while( ( to[ i ] = from[ i ] ) != '\0' )
++i;
}
#define MAXLINE 1000 // 행의 최대 문자 길이 지정
int getline( char line[], int maxline );
void copy( char to[], char from[] );
/* print longest input line */
main(){
int len;
int max;
char line[MAXLINE];
char longest[MAXLINE];
max = 0;
while( ( len = getline( line, MAXLINE ) ) > 0 )
if( len > max ){
max = len;
copy( longest, line );
}
if( max > 0 )
printf( "%d %s", max, longest );
return 0;
}
/* getline: s배열로 행을 읽고, 길이 반환 */
int getline( 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;
}
/* copy: from 배열을 to 배열로 복사; 크기가 너무 크지 않은지 확인 */
void copy( char to[], char from[] ){
int i;
i = 0;
while( ( to[ i ] = from[ i ] ) != '\0' )
++i;
}
- main에서 입력받을 line[1000] 배열과 최대허용문자 MAXLINE(1000)의 매개변수로 getline 함수를 호출한다.
- 배열은 0부터 시작하므로 for문의 i가 최대 배열길이 999를 넘지 않고, 입력받은 문자가 EOF가 아니고, 행바꿈문자가 아니면 입력받은 문자길이만큼 s배열에 저장한다.
- 행바꿈 문자를 입력받으면 지금까지 입력받은 문자 길이만큼 s배열에 저장하고 배열의 마지막 첨자에 \0을 입력하고 배열의 길이를 반환한다.
- 반환된 길이가 max 변수보다 크면 max 변수에 그 길이를 저장하고 longest[1000]과 line[i] 배열의 매개변수로 copy 함수를 호출한다.
- 파일의 끝이 아니라면 longest배열에 line배열을 저장한다.
- main에서 최대문자수와 가장 긴 행을 출력한다.
WRITTEN BY
- 손가락귀신
정신 못차리면, 벌 받는다.
,