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);
            }


}
4

2 回答 2

2

尝试:

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

您的缩进表明您希望else分支与第一个 if 一起使用,但就像现在一样,它与 inner 相对应if

还有,spaces = 0是赋值,spaces == 0是比较。

于 2012-08-24T13:27:43.027 回答
0
  • 读取一个字符串。
  • 使用 strlen() 或类似方法查找字符串的结尾。
  • for(i=string_length-i; i>=0; i--) 如果您愿意,也可以使用指针。
  • 在找到第一个非空间时中断循环。
  • 在第一个非空格+1 处插入一个空终止符。
于 2012-08-24T14:10:30.577 回答