我正在尝试找到压缩空行的方法。我当前的代码是为中间部分执行的,但在开始时它不压缩空行。
CODE:
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int main (void)
{
int c, space = 0, newline = 0;
/*reads char by char til EOF*/
while((c = getchar()) != EOF)
{
if(c == '\t')
{
c = ' ';
}
if(c == ' ')
{
if(space == 0)
{
putchar(' ');
space = 1;
}
}
else if(c == '\n')
{
newline++;
if(newline <= 2)
{
putchar('\n');
}
}
else
{
if(space == 1)
{
space = 0;
}
if(c != '\n')
{
newline = 0;
}
putchar(c);
}
}
return 0;
}
说我输入:
[空白] [空白] [空白] 测试 [空白] [空白] [空白]
我希望输出为: [空白] 测试 [空白]
如何更改我的代码以便输出正确的内容。
提前致谢
PS:我正在使用I / O重定向来测试它。
编辑:忘了提到我使用linux文本文件,所以它摆脱了/ r编辑2:我在这里上传了输出文件:
答案 0 :(得分:0)
有时文件使用\ r \ n而不是\ n,所以,你要排除\ r。
答案 1 :(得分:0)
我不明白你想用
做什么if(newline <= 2)
{
putchar('\n');
}
第一次,第二次和第三次看到一个新行,你就换了一行。当然[BLANK] [BLANK] [BLANK]的东西变成[BLANK] [BLANK] [BLANK]的东西。
你应该尝试将其重新编写为状态机:你会更清楚你想要做什么,当你看到每个角色时你会更清楚你需要做什么。
此外,请考虑使用switch语句而不是所有ifs。