이 연습은 나를 미치게합니다. 미안 프로그래밍 문제가 사소한 것처럼 보일지라도 나는 초보자이므로 나와 함께 참아주십시오.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);
}
:
당신이 당신의 컴퓨터에 디버거를 가지고 있습니까 (또한 당신이 어디
len
를 사용하지 않는 것이 주)? 한 번에 한 줄씩 코드를 실행하면 잘못된 부분이 표시됩니다. – usr2564301'last_letter'를 * anything *으로 설정하는 데 필요한 문자 중 * none *을 입력 할 때'last \ return + 1; (스페이스와 탭)? 여기에는 초기 값이 없습니다. 일단 그것을 고치면, 'last_letter + 1'이 아무렇게나 0이 아니면 뜨거운 물에 남아 있습니다. – WhozCraig