简单的C程序 - 需要帮助

时间:2011-05-11 09:34:20

标签: c syntax while-loop

我有一个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 个答案:

答案 0 :(得分:4)

您的return 0;位于while()循环内,因此在第一次循环运行后它将始终退出。你必须把它移到外面。

要添加换行符,请替换

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

if ( end )
{
    *end = '\n';
    *(end + 1) = '\0';
}

答案 1 :(得分:1)

尝试将return 0;`out while while循环

答案 2 :(得分:0)

Yout返回在“while”循环内 你的程序结束应该是这样的:

  }
   return 0;
}

答案 3 :(得分:0)

这条线引起了你的悲痛:

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。