принимая входные данные из файла_2 - PullRequest
0 голосов
/ 12 октября 2011

я беру данные из файла построчно ... каждая строка содержит три или меньше столбцов ... все хорошо, если строка в файле похожа на

     lda #5           

или

label +lda #5

но если строка начинается с '+', как

+lda #5

эта строка не вводится .... почему это так?

код ввода

ifstream in(asmfile,ios::in);
char c;
string str[3];
string subset;
long locctr=0;
int i=0;


while((c=in.get())!=EOF)
{
    in.putback(c);
    str[0]="";
    str[1]="";
    str[2]="";
    i=0;

    while((c=in.get())!='\n' && c!=EOF)
    {

        in.putback(c);
        in>>str[i++];

    }
}

Ответы [ 2 ]

4 голосов
/ 12 октября 2011

Я не уверен, куда вы пытались перейти со своим кодом, но он кажется мне очень плохо сконструированным, и вы пометили вопрос как C ++, поэтому я бы порекомендовал вам использовать стандартную идиому C ++ для чтения строки файлапо линии:

#include <string>
#include <fstream>

std::ifstream infile(asmfile);
std::string line;

while (std::getline(infile, line))
{
  // process "line"
  // e.g. "lines.push_back(line);" , with "std::vector<std::string> lines;"
}
1 голос
/ 12 октября 2011

Как написано, я полагаю, что опубликованный код будет читать строки, показанные в качестве примеров. Фактически, я только что запустил его, и он также прочитал строку, которую вы указали, не будет работать (и он читает только два «слова», так как оператор >> в этом случае будет использовать пробел в качестве разделителя для строки.

Возможная причина сбоя заключается в том, что строка, предшествующая строке +lda #5, содержит более трех слов (разделенных пробелами). Это может привести к неопределенному поведению (вполне возможно, к нарушению прав доступа), поскольку массив str имеет только три элемента, и нет проверки для случая, когда в строке более трех слов.

...