簡體   English   中英

從文件中獲取輸入

[英]taking input from a file

我有以下名為asmfile.txt的文件

copy start 1000
read  ldx zero
      rd indev
rloop tix k100

為了從此文件中進行逐行輸入,我編寫了以下代碼。

void aviasm::crsymtab()
{


ifstream in(asmfile,ios::in);//opening the asmfile
in.seekg(0,ios::beg);


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]="";

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

        in.putback(c);
        in>>str[i];
        i==2?i=0:i++;  //limiting i to 2....

    }

    cout<<str[0]<<" "<<str[1]<<" "<<str[2]<<endl;
}

in.close();
}

//現在的問題是前三行已成功輸入到str ...但是最后一行未輸入到str ....我知道這是因為在控制台上運行程序時我看到了...

copy start 1000
read  ldx zero
rd indev

'rd indev'的縮進更改是因為str [0] =“ rd”和str [1] =“ indev” ..... plz告訴我為什么第四行沒有輸入到str ....

我不知道逐個字符讀取文件並將其放回流中的目的是什么。

string str[3];

定義字符串str[0]str[2] 寫入不存在的str[3]是未定義的行為。 一種更清潔的方法是

std::ifstream in(asmfile);
std::vector<std::string> lines;
std::string line;

while (std::getline(in, line))
{
  lines.push_back(line);
}

然后, lines.size()給出成功讀取的行數。

for (size_t i = 0; i < lines.size(); ++i)
{
  std::cout << i << " :  " << lines[i] << '\n';
}

至於代碼為什么失敗: while((c=in.get())!='\\n')的最后一行中沒有換行符時, while((c=in.get())!='\\n')進入無限循環。

更改i==2?i=0:i++; 到i ++並移動int i=0; 在while循環中,編輯asmfile,以使它在最后一行后面有一個換行符,您的代碼將起作用。

就是說,您真的應該像Rene建議的那樣去做。 像這樣的代碼很亂而且容易出錯。

我無法調試代碼,因為我不明白你的意圖-什么是成交與get()pushback()調用? 因此,讓我重寫您的代碼,而不是回答您的緊迫問題:

#include <string>
#include <sstream>
#include <iostream>
#include <fstream>

const char * asmfile("/tmp/asm.txt");
void crsymtab()
{
  std::ifstream in(asmfile); // opening the asmfile

  std::string line;
  while(std::getline(in, line)) {
    std::istringstream sline(line);
    std::string str[3];
    if(sline.peek() == ' ')
      sline >> str[1] >> str[2];
    else
      sline >> str[0] >> str[1] >> str[2];
    std::cout << str[0] << " " << str[1] << " " << str[2] << "\n";
  }
}

int main() { crsymtab(); }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM