我正在使用getchar和putchar进行文本格式化(来自Ritchie C一书)。我能够消除' //'评论,但我在删除空行上的一些换行符时遇到问题。我想删除行注释' //'和" blanK"换行符 - 源文件中没有任何文本的行。
我在输出文件中得到了奇怪的^ M个字符。
if else语句似乎检查前一个char(pre)和当前char c是否都是' \ n'正在创建错误。
如果你删除它,它不再给出奇怪的输出:
else if(c == '\n' && pre == '\n')
{
pre = c;
}
以下完整代码:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
main()
{
int c;
int pre;
int comment = 0;
while ((c = getchar()) != EOF)
{
// printf("%c", c);
// printf("pre is %c comment is %d c is %c\n", pre, comment, c);
// check to see if we're at a newline and set comment toggle to 0
if(c == '\n' && comment ==1)
{
comment = 0;
pre = c;
}
else if(c == '\n' && pre == '\n')
{
pre = c;
}
else if(comment == 1)
{
pre = c;
}
else if(pre == '/' && c == '/')
{
comment = 1;
pre = c;
}
else if(c == '/')
{
pre = c;
}
else if(pre =='/')
{
putchar(pre);
putchar(c);
pre = c;
}
else
putchar(c);
}
return 0;
}
输入文件是Add.asm。
// This file is part of www.nand2tetris.org
// and the book "The Elements of Computing Systems"
// by Nisan and Schocken, MIT Press.
// File name: projects/06/add/Add.asm
// Computes R0 = 2 + 3 (R0 refers to RAM[0])
@2
D=A
@3
D=D+A
@0
M=D
输出文件是bdd.hack,它在github上看起来很好但是当我用vim打开它看起来像这样:
^M^M@2^MD=A^M@3^MD=D+A^M@0^MM=D
C程序是汇编程序。 我在命令行上这样调用它 cc assembler.c ./a.out bdd.hack
github repo with input file Add.asm, output file bdd.hack, and program to format text assembler.c
注意:这是一个自学课程NAND到俄罗斯方块 - 我在C / C中写这个我学习C并认为这将是一个有趣的项目在C(基本汇编语言)。您可以忽略assembler.c底部的伪代码。
答案 0 :(得分:0)
这是一个Windows文本文件,因此上面有TonyB建议的^ M个字符。我使用dos2unix在我的debian系统上正确格式化文件,问题解决了。谢谢大家的帮助!