getcharとputchar(リッチーCの本から)を使用してテキスト書式を処理しています。私は '//'コメントを取り除くことができますが、空白行にある改行のいくつかを削除することに問題があります。私は、ソースファイルから行コメント '//'と 'blanK'改行 - テキストのない行 - を取り除きたい。ファイルを読み込んだときに予期しない戻り値^ Mがgetchar/putcharから返される
出力ファイルに奇妙な^ M文字が表示されています。
前のchar(前)と現在のchar cの両方が '\ n'であるかどうかをチェックするif文がエラーを作成しているようです。
あなたは、このことはもはや奇妙な出力を与える削除する場合:以下
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^[email protected]^MD=A^[email protected]^MD=D+A^[email protected]^MM=D
Cプログラムがassembler.cです。 私は
github repo with input file Add.asm, output file bdd.hack, and program to format text assembler.c
NOTEをbdd.hack ./a.outこの のcc assembler.c ようなコマンドラインでこれを呼んでいる:これは、テトリスの自習コースNANDのためである - 私は」私はC言語でこれを書いています。私はC言語を学んでいて、これはC言語(基本アセンブラ)で行うのが楽しいプロジェクトだと思っていました。 assembler.cの一番下の擬似コードは無視できます。
コードへのリンクを投稿しないでください。代わりにコードを投稿してください。 See [ask]。 –
^mはキャリッジリターンです... Windowsのテキストファイルの行末に改行が続き、改行が続きます。両方とも取り除く必要があります – TonyB
@TonyB私は現在Windowsのバーチャルボックスで実行しています。私がDebianを仮想ボックスで実行している場合は私に影響しますか? – theporpoise