Простая программа на C - нужна помощь - PullRequest
1 голос
/ 11 мая 2011

У меня есть фрагмент кода C ++:

#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
    char s[2048];
    while (fgets(s, sizeof(s), stdin))
    {
        char *pos = strpbrk(s, ">\r\n");
        if (pos != 0)
        {
            char *end = strrchr( pos, '<' );
            if ( end )
                *end = '\0';
            fputs(pos+1, stdout);
        }

        return 0;
    } 
}

Хотя при обрезке текстового файла с его использованием он работает только с 1 строкой, например обрезает только 1 строку.

Если я пытаюсь обрезать несколько строк, например, файл с 30 строками, обрезает только одну строку. Я довольно смущен, любая помощь будет оценена.

Пример текстового файла:

report2011510222820.html:   <td width="60%" bgcolor="#ffffff" class="tablebody" valign="top">C:\Users\Admin\mon.bat</td>
report2011510222820.html:   <td width="60%" bgcolor="#ffffff" class="tablebody" valign="top">C:\test123.bat</td>

Выход:

C:\Users\Admin\mon.bat

Ожидаемый результат:

C:\Users\Admin\mon.bat
C:\test123.bat

Ответы [ 4 ]

4 голосов
/ 11 мая 2011

Ваш return 0; находится внутри цикла while(), поэтому он всегда будет выходить после первого прохода цикла.Вы должны переместить его наружу.

Чтобы добавить разрыв строки, замените

if ( end )
    *end = '\0';

на

if ( end )
{
    *end = '\n';
    *(end + 1) = '\0';
}
1 голос
/ 11 мая 2011

Попробуйте выставить return 0; `из цикла while

0 голосов
/ 11 мая 2011

Эта строка вызывает ваше горе:

return 0;

Если вы правильно сделали отступ в своем источнике, вы сможете увидеть ошибку намного проще. Здесь это исправлено и с отступом:

#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
    char s[2048];
    while (fgets(s, sizeof(s), stdin))
    {
        char *pos = strpbrk(s, ">\r\n");
        if (pos != 0)
        {
            char *end = strrchr( pos, '<' );
            if ( end )
                *end = '\0';
            fprintf(stdout, "%s\r\n", pos + 1); /* Fixed formatting */
         }
   }
    return 0;
}

Обратите внимание, что вы пометили это как код C ++, но на самом деле это просто старый C.

0 голосов
/ 11 мая 2011

Yout return находится внутри цикла while, конец вашей программы должен выглядеть следующим образом:

  }
   return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...