2012-08-24 184 views
0

我正在通过k & r工作,我正在处理问题1-18。编写程序以删除每行输入中的TRAILING空白和制表符,并删除完全空白的行。我的想法是读每行,并计算空格的数量。如果它是使用putchar的第一个空白打印。如果有第二张空白不打印并将空格重置为0.然后继续阅读并移除空格。删除尾部空白

目前我只是打印其他任何东西,因为我试图做一点点。一旦我运行这个程序,我会在终端中获得其中两个。我认为我错误地嵌套了if语句或else语句时遇到了问题,之前我有一些错误。我是否正确地去除空白的逻辑?如果有人能指出我正确的方向来修复代码,我将不胜感激。

#include <stdio.h> 

main() 
{ 
    int c, i, spaces;    /*c for input, i for counting*/ 

    i = 0; 
    c = 0; 
    spaces = 0; 
    while ((c = getchar())!=EOF) 
      if(spaces = 0 && c == ' ') 
        ++spaces; 
        putchar(c); 
        if(spaces >= 1) 
          spaces = 0; 
      else { 
        putchar(c); 
      } 


} 
+0

我没有检查其余的逻辑,但是这个'if(spaces = 0 && c =='')'应该可以是'if(spaces == 0 && c =='')' 。 '='vs.'==' – Henrik

+0

谢谢,愚蠢的错误。将终端中的奇怪问号减少到一个 – bigl

+0

你应该使用getchar()来解决这个问题(而不是读整行)? – Scooter

回答

2

尝试用:

if(spaces == 0 && c == ' ') 
{ 
    ++spaces; 
    putchar(c); 
    if(spaces >= 1) 
     spaces = 0; 
} 
else 
{ 
    putchar(c); 
} 

您的压痕表明你想要的else分支去的第一个if,但因为它是现在,它与内if对应。

另外,spaces = 0是一项任务,spaces == 0是一个比较。

+0

atleast现在运行的程序谢谢你,但它不会做它应该做的事情。也许我做错了方式 – bigl

+0

@bigl你有调试吗? –

+0

它基本上将所有字符正确地返回并运行正常。虽然 – bigl

0
  • 读取字符串。
  • 使用strlen()或类似的方法查找字符串的结尾。
  • for(i=string_length-i; i>=0; i--)或使用指针,如果你喜欢。
  • 在找到第一个非空格时断开循环。
  • 在第一个非空格+ 1处插入空终止符。