【发布时间】:2012-08-24 13:24:12
【问题描述】:
我正在处理 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);
}
}
【问题讨论】:
-
我没有检查其余的逻辑,但这个
if(spaces = 0 && c == ' ')应该是if(spaces == 0 && c == ' ')。=与== -
谢谢,愚蠢的错误。这将终端中奇怪的问号减少到一个
-
您是否应该使用 getchar() 来解决这个问题(而不是读取整行)?
-
到目前为止我只在书中看到过 getchar()
-
您说要删除 TRAILING 空格。我认为在您阅读整行之前不可能知道是否有空格。除非该行永远不会嵌入空格,在这种情况下,您需要一个非空格标志,而不是空格。
标签: c if-statement whitespace