2011-05-11 192 views
1

我有一个C++代码片段:简单的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

抱歉,但是这是不是** ** C++,更改标记为C,或者在C++中真正做到这一点 – Nim 2011-05-11 09:36:06

+1

不,你有一个C代码片段。 :)如果你真的告诉人们你正在使用什么语言,你通常可以得到更好的答案。只要你正在编写C代码,就可以标记问题'[c]',并且询问C.如果你假装它是C++,那么你将主要得到很多答案,告诉你应该如何重写你的代码C++ – jalf 2011-05-11 09:37:39

+0

@Nim:使用C的IO东西而不是流是没有错的。 – Mario 2011-05-11 09:38:57

回答

4

return 0;while()循环中,因此在第一次运行之后总是退出通过循环。你必须把它移到外面。

要添加一个换行符,更换

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

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

嗨,谢谢,但现在所有划线都出现在1行上,而不是在他们的重要线条上,可以做些什么来使它们保持原来的行? – James 2011-05-11 09:40:58

+0

@Mario嗨,谢谢,但现在所有划过的线条都出现在1行上,而不是在他们的重要线条上,可以做些什么来保持它们的原始行? – James 2011-05-11 09:43:03

+0

您必须将换行符添加到您切断的行的末尾(例如,通过在行后面写入'\ n'')。还要注意(对于MSVC,不知道你的编译器),运行时将会在运行时执行'\ n' /'\ r \ n'转换,所以只需写入''n''就足够了。 – Mario 2011-05-11 09:43:36

0

YOUT回报是里面的 “而” 循环 你的程序到底应该是这样的:

} 
    return 0; 
} 
1

尝试将返回0;`退出while循环

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.