2016-10-15 11 views
-1

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の一番下の擬似コードは無視できます。

+2

コードへのリンクを投稿しないでください。代わりにコードを投稿してください。 See [ask]。 –

+2

^mはキャリッジリターンです... Windowsのテキストファイルの行末に改行が続き、改行が続きます。両方とも取り除く必要があります – TonyB

+0

@TonyB私は現在Windowsのバーチャルボックスで実行しています。私がDebianを仮想ボックスで実行している場合は私に影響しますか? – theporpoise

答えて

0

これはWindowsのテキストファイルであったため、上のTonyBが示唆している^ M文字を持っていました。私はdos2unixを使って私のdebianシステム上でファイルを正しくフォーマットし、問題は解決しました。みんなあなたの助けをありがとう!

関連する問題