我正在研究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 :(得分:2)
尝试:
if(spaces == 0 && c == ' ')
{
++spaces;
putchar(c);
if(spaces >= 1)
spaces = 0;
}
else
{
putchar(c);
}
您的缩进建议您希望else
分支与第一个分支一起使用,但就像现在一样,它与内部if
对应。
此外,spaces = 0
是作业,spaces == 0
是比较。
答案 1 :(得分:0)
for(i=string_length-i; i>=0; i--)
或者如果您愿意,可以使用指针。