2012-08-24 3 views
0

저는 k & r을 통해 작업 중이며, 문제 1-18에서 작업 중입니다. 각 입력 행에서 TRAILING 공백 및 탭을 제거하고 완전히 빈 줄을 삭제하는 프로그램을 작성하십시오. 내 생각은 각 줄을 읽고 공백 수를 계산하는 것입니다. 첫 번째 공백 인 경우 putchar을 사용하여 인쇄하십시오. 두 번째 공백이 있으면 공백을 다시 인쇄하고 공백을 0으로 재설정하십시오. 그런 다음 계속해서 공백을 제거하고 공백을 제거하십시오.뒤 공백을 제거하십시오.

나는 조금씩 조금씩 해보려고하기 때문에 지금은 다른 어떤 것을 인쇄해야합니다. 이 프로그램을 실행하면 터미널에서이 두 가지를 얻을 수 있습니다. if 문이나 else 문을 잘못 중첩하는 데 문제가 있다고 생각합니다. 이전에 일부 오류가있었습니다. 공백을 제거하는 논리가 올바른 방법일까요? 누군가가 코드를 수정하는 올바른 방향으로 나를 가리킬 수 있다면 나는 감사 할 것입니다.

#include <stdio.h> 

main() 
{ 
    int c, i, spaces;    /*c for input, i for counting*/ 

    i = 0; 
    c = 0; 
    spaces = 0; 
    while ((c = getchar())!=EOF) 
      if(spaces = 0 && c == ' ') 
        ++spaces; 
        putchar(c); 
        if(spaces >= 1) 
          spaces = 0; 
      else { 
        putchar(c); 
      } 


} 
+0

로직의 나머지는 확인하지 않았지만이 if (spaces = 0 && c == '')는 아마 if (spaces == 0 && c == '') . '='vs'==' – Henrik

+0

고마워, 어리석은 실수. 터미널에있는 이상한 물음표를 하나씩 줄입니다. – bigl

+0

getchar()을 사용하여 전체 행을 읽는 대신이 문제를 해결해야합니까? – Scooter

답변

2

로 시도해보십시오

if(spaces == 0 && c == ' ') 
{ 
    ++spaces; 
    putchar(c); 
    if(spaces >= 1) 
     spaces = 0; 
} 
else 
{ 
    putchar(c); 
} 

당신의 들여 쓰기는 else 분기의 경우 첫 번째로 가고 싶어 제안하지만, 지금처럼, 그것은 내부 if에 해당합니다.

spaces = 0 또한 spaces == 0입니다.

+0

지금 atleast 프로그램을 실행 해 주셔서 감사합니다. 아마도 내가 잘못된 방법으로하고있다. – bigl

+0

@bigl 디버깅 해 봤어? –

+0

기본적으로 모든 문자를 올바르게 되돌려 놓고 잘 실행됩니다. 그것은 내 질문에 대답하지 않는 – bigl

0
  • 문자열을 읽습니다.
  • strlen() 또는 유사한 방법을 사용하여 문자열의 끝을 찾습니다.
  • for(i=string_length-i; i>=0; i--) 또는 원하는 경우 포인터를 사용하십시오.
  • 첫 번째 공백이 발견되지 않았을 때 브레이크 루프.
  • 첫 번째 비 공백 + 1에 널 종료를 삽입하십시오.
관련 문제