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