2012-04-27 6 views
1

Мне нужно написать программу, которая читает из stdin и записывает непустые строки в stdout (т. Е. Строки, содержащие только \ n). Например, если STDIN был:Проверка ввода пустых строк ( n n)

1 

2 

\n 

3 

Выход будет:

1 

2 

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; 
} 

Есть ли способ, что я могу цикл программа, хотя, так что даже если пустая строка введена, пользователь все равно может продолжать вводить?

+2

Я не уверен, что ваша программа соответствует вашему описанию (и, так как программа имеет проблемы синтаксиса, это трудно понять, если то, что вы хотите, что программа выглядит как это может быть делать или что вы ставите в вопрос). Самая большая запутанная вещь заключается в том, что программа, по-видимому, только когда-либо читает одну строку текста, поэтому нет возможности для чтения более чем одного «\ n». –

+0

Звучит очень похоже на домашнюю работу. Если мое предположение верно, перейдите и отредактируйте сообщение, чтобы включить тег 'homework'. – 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 & Rs и, возможно, каждую соответствующую статью C в Интернете, и я до сих пор не могу, по жизни, разработать правильный способ сделать это. – SeekingCharlie

0

Если вы не обязаны делать это только на C. Затем вы можете использовать UNIX и Perl, чтобы решить вашу проблему

Входной

1 
2 
\n 
3 

UNIX решение

$> grep -v '\n' Input 

PERL Solution

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

Выход

1 
2 
3 
Смежные вопросы