2016-12-06 1 views
-1
while (1) { 
    palindrome = my_string_init_default(); 
    while (1) { 
     ch = getc(stdin); 

     if (ch == '\n') { 

      break; 
     } 
     else { 

      continue; 
     } 

     palindrome->push_back(palindrome, ch); 


    } 

    if (is_palindrome(palindrome)) { 

     printf("Yes \n"); 

    } 
    else { 
     printf("No \n"); 
    } 


    palindrome->destroy(&palindrome); 



} 

return 0; 
} 

기본적으로 텍스트가 회문인지 여부를 확인하려고합니다. 코드의 해당 부분은 여기에 표시되지 않으며 완벽하게 작동합니다. 내가하려고하는 것은 라인 끝이있을 때까지 입력 내용을 읽는 것입니다. 그런 다음 해당 라인이 회문인지 아닌지 확인하는 문자열을 고려하십시오. 프로그램을 종료하는 대신에 다음 줄로 가야하고 EOF에 도달 할 때까지 계속 반복해야합니다. 내 버퍼 위치를 엉망으로 만들지 않고 여기 어떻게해야합니까? 여기서 fseek을 사용할 수 있습니까?stdin에서 버퍼 위치를 엉망으로 만들지 않고 중첩 루프 사용

+0

'stdin' 관리와 관련하여 특별한 일을해야합니다. (문제가 그 문제와 관련이없는 것처럼 보입니다.) –

+0

'scanf '를 사용할 수없는 이유가 있습니까? (예를 들어'char'을 읽지 않고 콘솔에서'string'을 한 번 읽는다.) – ryyker

답변

1

palindrome->push_back(palindrome, ch);에 도달하지 못하게됩니다 (다음 반복을 건너 뛰거나 건너 뛸 수 있기 때문입니다).

사용이 :

while (1) { 
    ch = getc(stdin); 
    if (ch == '\n') { 
     break; 
    } 
    // otherwise: 
    palindrome->push_back(palindrome, ch); 
} 

업데이트. 나는 당신이 필요로하는 것을 이해 지금까지, 당신이 할 수있는 (그것의로, 각 라인, 심지어 마지막 하나는, \n로 끝나는 가정을 UNIX에 있어야한다고) : 내가 왜이 표시되지 않는

while (1) { 
    palindrome = my_string_init_default(); 
    while (1) { 
     ch = getc(stdin); 

     if (ch == '\n' || ch == EOF) { 
      break; 
     } 
     palindrome->push_back(palindrome, ch); 
    } 

    if (ch != EOF) { 
     if (is_palindrome(palindrome)) { 
      printf("Yes \n"); 
     } 
     else { 
      printf("No \n"); 
     } 
    } 

    palindrome->destroy(&palindrome); 

    if (ch == EOF) { 
     break; 
    } 
} 

return 0; 
} 
+0

네가 내 초기 코드 였고 (위의 코드가 작동했다) 위의 그림은 실패한 시도이다. 텍스트 한 줄 이상으로 작업하십시오. 한 줄에 대해서만 작동합니다. 그런 다음 프로그램을 종료합니다. –

+0

@Byte_Spike, 나는 당신을 믿지 않는다. 위에서 제시 한 코드의 바깥 쪽 루프는 무한합니다. 이 대답에서 알 수 있듯이 수정하면 변경되지 않습니다. –

+0

각 줄을 따로 분리하십시오. 기본적으로 각 줄 끝에 \ n을 삽입하면됩니다. 모든 행을 실행하고 각 행 다음에 결과를 출력합니다. Case와 유사하고 루프가 아니었고 더 쉬웠지만 이번에는 Case를 사치스럽게 사용하지 않았습니다. 도 있습니다. 다시 한 줄로 작동하게 만들었고 회문 코드가 작동하는지 여부를 알 수 없으면 전혀 어렵지 않습니다. 당신이 한 것을 얻으려면 백엔드 데이터 구조와 필자가 작성해야했던 palindrome 프로그램에 비해 매우 간단합니다. 이것은 실제로 조사가 아닙니다. –