2017-10-21 44 views
0

기본적으로 두 줄을 읽는 짧은 프로그램을 만들고 있는데, 두 줄을 읽는다면, 두 줄을 모두 읽고 쓸 것입니다. 진리가 같은 문장이라면 프로그램은 단 하나의 문장 만 씁니다. 빈 줄이 두 개 발견되면 프로그램을 중단해야합니다. 그리고 그것은 문제입니다. 나는 그것을하는 방법을 알아낼 수 없다. 난 이미 strcmp() 함수를 사용하려고했지만 그 중 하나를 작동하지 않았다. 여기 내 코드는 다음과 같습니다 fgets()는 줄 바꿈 ('\n')에서 읽기 때문에fgets()를 사용하여 두 줄이 비어있을 때 프로그램을 멈추려고 시도

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main() 
{ 
    char sent1[6000], sent2[6000]; 

    while(1){ 

    fgets(sent1, sizeof(sent1), stdin); 
    fgets(sent2, sizeof(sent2), stdin); 

    if(strcmp(sent1, sent2)!=0) 
     printf("%s%s", sent1, sent2); 
    else 
     printf("%s", sent1); 

    if((sent1[0] == '/0') && (sent2[0] == '/0')) 
     break; 

    } 

    return 0; 
} 

답변

0

귀하의 라인이 비어 있지. 따라서 개행 캐릭터를 확인해야합니다. null 문자가 '\0'하지 '/0' 때문에

if((sent1[0] == '\n') && (sent2[0] == '\n')) 
    break; 

그리 관련이 더 이상하지만 비교는 잘못된 것입니다.

앞에서 말한 것처럼 fgets()은 버퍼에 공백이 있으면 줄 바꿈 문자를 읽습니다. 당신의 경우에는, 당신이 그들을 비교하고 있기 때문에, 당신은 그 사실을 알고 있어야합니다. 아마도 개행 문자도 제거해야 할 것입니다. 예를 들어, 고려 (뿐만 아니라 sent2와 같은)

char *p; 
if ((p = strchr(sent1, '\n')) != NULL) 
    *p = '\0'; 

또 다른 경우는 fgets() 호출이 실패하는 경우 것입니다. 실패에 대한 반환 값을 확인해야합니다. fgets()은 실패시 NULL을 반환합니다.

+0

'/ 0'insted '\ 0'은 오타였습니다. D. 어쨌든 도와 주셔서 감사합니다! if ((sent1 [0] == '\ n') && (sent2 [0])에 if ((sent1 [0] == '\ 0') && (sent2 [0] == '\ 0' == '\ n'))). – Beo

+0

여러분을 환영합니다! 그것이 당신을 위해 일하는 동안, 대답에 언급 된 것들에 유의하십시오. 당신도 * 실패 할 수도 있다는 것을 알고 있어야합니다. 행운을 빕니다! – usr

+0

분명히 명심해야 겠네! 다시 한번 감사드립니다. – Beo

0

fgets 줄 바꿈 문자를 포함한 줄을 읽습니다. 따라서 파일에 빈 줄이 포함되어있는 경우 해당 줄의 위치는 이고 '\0'이 아닌 '\n' 일 수 있습니다.

시도 : 또한

if(((sent1[0] == '\0') || (sent1[0] == '\n')) 
    && ((sent1[0] == '\0') || (sent1[0] == '\n'))) 

, 당신이 파일의 끝에 도달 한 경우 NULL입니다 fgets의 반환 값을 확인해야합니다 참고. 이 경우 sent1 또는 sent2은 더 이상 변경되지 않으므로 무한 루프가 발생할 수 있습니다.

+0

도움을 주셔서 감사합니다. 문제를 해결할 수있었습니다. D. – Beo