2012-04-27 2 views
1

stdin에서 읽는 프로그램을 작성해야하며 비어있는 줄만 stdout (즉 \ n 만 포함하는 줄)에 씁니다. 예를 들어, 표준 입력은 경우였다빈 줄 입력 유효성 검사 ( n n)

1 

2 

\n 

3 

는 출력은 다음과 같습니다

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

int main() 

{ 
    char buf[BUFSIZ]; 
    char *p; 

    printf ("Please enter some lines of text\n"); 

    if (fgets(buf, sizeof(buf), stdin) != NULL) 
    { 
     printf ("%s\n", buf); 
     /* 
     * Remove newline character 
     */ 
     if ((p = strchr(buf, '\n')) != NULL) 
      *p = '\0'; 
    } 
    return 0; 
} 

어떤 방법이 있나요이 내가 루프 수 :

1 

2 

3 

이것은 내가 지금까지 무엇을 가지고 그래도 빈 줄을 입력하더라도 사용자는 계속 입력 할 수 있습니다.

+2

나는 당신의 프로그램이 설명을 일치하는지 모르겠어요 (프로그램이 구문에 문제가 있기 때문에, 그것은 당신이 원하는 것은 그것이 될 수 같은 프로그램이 모습입니다 알고 어렵다 당신이 질문에 넣은 것). 가장 큰 혼란스러운 점은 프로그램이 한 줄의 텍스트 만 읽는 것 같아서 하나 이상의 '\ n'을 읽을 수있는 기회가별로 없다는 것입니다. –

+0

숙제와 비슷합니다. 제 가정이 맞다면'숙제'태그를 포함하도록 게시물을 편집하십시오. – Till

+0

고마워요 - 숙제 태그를 포함 시켰습니다. – SeekingCharlie

답변

0
#include <stdio.h> 

int main(void){ 
    char buf[BUFSIZ]; 

    printf ("Please enter some lines of text\n"); 

    while(fgets(buf, sizeof(buf), stdin) != NULL){ 
     if(*buf != '\n') 
      printf("%s", buf); 
    } 
    return 0; 
} 
1

이 숙제가 있습니까? 그렇지 않으면

, GREP은 당신이 원하는 것을 할 것입니다 :

입니다
grep --invert-match '^$' yourfile 

, 라인 (^)로 시작하지 않는 모든 라인을 일치 다음에 바로 선 ($)의 말.

1

따라서 if 문은 한 번 코드 블록 용이므로 루프 문이 필요합니다. 동일한 조건을 사용할 수도 있습니다. 당신이 필요로하는 약간의 다른 작은 변화도 있지만, 일단 당신이 필요한 루프의 유형을 알아 내면, 대부분 거기에 있어야합니다.

+0

나는 그것이 이상하지 않다는 것과 내가 직접 답을 찾아야한다는 것을 알고있다.하지만 해결책을 보여줄 수있는 방법이 있는가?나는 K & R 책과 아마 모든 관련 C 기사를 온라인으로 읽었으며, 나 자신의 삶을 위해 올바른 방법을 찾아 낼 수는 없다. – SeekingCharlie

0

C로만 작성해야하는 경우에만 작성하십시오. 그런 다음

$> grep -v '\n' Input 

펄 솔루션

@text = `cat /home/Input`; 
foreach my $no_only (@text) 
{ 
     if ($no_only =~ /\d/) 
     { 
       print "$no_only\n"; 
     } 
} 
에게 UNIX와 펄

1 
2 
\n 
3 

UNIX 솔루션 문제 해결

입력하는 데 사용할 수있는

출력

1 
2 
3