0

このプログラムの要点は、ファイルから命令のリストを読み取ることです。最初のパススルーでは、左端のコマンド ( のないコマンドのみ\t) をその前に取得しています。私はなんとかそれを行うことができましたが、コードをテストしてchar配列を正しくコピーしたかどうかを確認しているときに、出力の左側に本当に奇妙な文字が表示されるという問題が発生しています.

これが私が読んでいる元のファイルです:# Sample Input

    LA 1,3
    LA 2,1
TOP  NOP
    ADDR 3,1
    ST 3, VAL
    CMPR 3,4
    JNE TOP
    P_INT 1,VAL
    P_REGS
    HALT
VAL INT 0

ただし、私が受け取っている奇妙な出力は次のとおりです。

D
D
D
DTOP
DTOP
DTOP
DTOP
DTOP
DTOP
DTOP
DTOP
DVAL
D
D

どのようにしてこのような奇妙な出力が得られるのかわかりません。これが私のコードです:

#include <string>
#include <iostream>
#include <cstdlib>
#include <string.h>
#include <fstream>
#include <stdio.h>



using namespace std;


int main(int argc, char *argv[])
{
// If no extra file is provided then exit the program with error message
if (argc <= 1)
{
    cout << "Correct Usage: " << argv[0] << " <Filename>" << endl;
    exit (1);
}

// Array to hold the registers and initialize them all to zero
int registers [] = {0,0,0,0,0,0,0,0};

string memory [16000];

string symTbl [1000][1000];

char line[100], label[9];
char* pch;

// Open the file that was input on the command line
ifstream myFile;
myFile.open(argv[1]);


if (!myFile.is_open())
{
    cerr << "Cannot open the file." << endl;
}

int counter = 0;
int i = 0;

while (myFile.good())
{
    myFile.getline(line, 100, '\n');

    if (line[0] == '#')
    {
        continue;
    }


    if ( line[0] != '\t' && line[0]!=' ')
    {
        pch = strtok(line-1," \t\n");
        strcpy(label,pch);
    }

    cout << label<< endl;

        }



return 0;
}

どんな助けでも大歓迎です。

4

2 に答える 2

0

主要な問題の 1 つは、配列を初期化しないことです。labelそのため、配列に任意のランダム データが含まれる可能性があり、それを出力します。別の問題は、新しいラベルを取得しない場合でも、繰り返しごとにラベルを印刷することです。

コードには、 return かどうかをチェックしないなど、他にもいくつかの問題がありstrtokます。NULLwhile (myFile.getline(...))while (myFile.good())

主な問題の原因を突き止める最良の方法は、プログラムをデバッガーで実行し、1 行ずつ実行することです。次に、何が起こるかを確認し、変数を調べて、その内容が本来あるべきものであるかどうかを確認できます。ああ、文字配列の使用をやめて、できる限り使用std::stringしてください。

于 2012-09-15T09:29:21.960 に答える
0

印刷する前に に何らかの値を与える必要がある のelseケースを見逃したのかもしれません。if ( line[0] != '\t' && line[0]!=' ')label

于 2012-09-15T09:12:44.520 に答える