2014-11-22 3 views
0

이 연습은 나를 미치게합니다. 미안 프로그래밍 문제가 사소한 것처럼 보일지라도 나는 초보자이므로 나와 함께 참아주십시오.K & R 연습 문제 1-18 C 프로그래밍 언어

연습에서는 다음을 묻습니다. 각 입력 행에서 후미 공백과 탭을 제거하고 완전히 빈 줄을 삭제하는 프로그램을 작성하십시오.

아무도 내 코드가 작동하지 않는 이유를 말할 수 있습니까? 나는 아직 완전히 빈 줄의 문제를 다루지는 않았지만 내 코드가 뒤 공백과 탭을 제거하지 않는 이유를 찾을 수 없다. 여기있다 :

#include <stdio.h> 

#define MAXLINE 1000 

int better_line_length(char line[], int lim); 
void copy(char to[], char from[]); 

int main(void) 
{ 
    int len; 
    char s[MAXLINE]; 
    char better_s[MAXLINE]; 

    while ((len = better_line_length(s, MAXLINE)) > 0) { 
     copy(better_s, s); 
     printf("%s\n", better_s); 
    } 

    return 0; 
} 

int better_line_length(char s[], int lim) 
{ 
    int c, i, last_letter; 

    for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i) { 
     s[i] = c; 
     if (c != ' ' && c != '\t') 
      last_letter = i; 
    } 

    s[last_letter+1] = '\0'; 

    return last_letter+1; 
} 

void copy(char to[], char from[]) 
{ 
    int i = 0; 

    while ((to[i] = from[i]) != '\0') 
     ++i; 
} 

예를 들어, 나는 다음과 같은 코드가 작동 할 것으로 예상 :

abcdefg▯▯▯▯▯▯▯▯▯▯▯▯ 

I 출력을 기대 : 내 입력 (여기서 '▯'공간을 나타냅니다)이 같은 경우 도는

abcdefg 

예상 출력 후에는 공백이 없습니다.

대신 출력은 입력의 첫 번째 문자를 무한대로 출력합니다.

업데이트 : 키보드에서 입력을 받으면 내 코드가 예상대로 작동하지만 다른 파일에서 입력을 가져 오면 한 문자 반복됩니다. 내 마음이 날아 갔어. 그것은 항상 (최소 1 문자로 문자열)보다 0이됩니다 (len = better_line_length(s, MAXLINE))의 결과로 무한 반복 할

while ((len = better_line_length(s, MAXLINE)) > 0) { 
    copy(better_s, s); 
    printf("%s\n", better_s); 
} 

:

+1

당신이 당신의 컴퓨터에 디버거를 가지고 있습니까 (또한 당신이 어디 len를 사용하지 않는 것이 주)? 한 번에 한 줄씩 코드를 실행하면 잘못된 부분이 표시됩니다. – usr2564301

+1

'last_letter'를 * anything *으로 설정하는 데 필요한 문자 중 * none *을 입력 할 때'last \ return + 1; (스페이스와 탭)? 여기에는 초기 값이 없습니다. 일단 그것을 고치면, 'last_letter + 1'이 아무렇게나 0이 아니면 뜨거운 물에 남아 있습니다. – WhozCraig

답변

2

문제는 코드의 일부입니다.

while 루프가 필요하지 않습니다. 대신 다음과 같이 수행

len = better_line_length(s, MAXLINE); 
copy(better_s, s); 
printf("%s|\n", better_s); 

+0

도움을 주셔서 감사합니다,하지만 난 여전히 하나 이상의 라인 입력을위한 루프가 필요합니다. – jhschwartz

+0

좋아, 나는 단지 1 줄을 읽으 려한다고 생각했다. – syntagma

+0

당신은 사실'(len = better_line_length (s, MAXLINE))'가 항상 0보다 큰 것을 지적함으로써 제 자신의 질문에 대한 답변을 이끌었습니다. 감사합니다. – jhschwartz

관련 문제