功能无法读取完整输入

时间:2015-12-05 01:17:08

标签: c++ function if-statement while-loop ifstream

我调用类似getseconddata (list2,n)

的函数

输入文件读取

45 P 19
11 S 56
45 S F
30 P F

,功能代码读取

void getseconddata(employeetype list2[], int n)
{
ifstream infile2;
  string filename;
  int id, changenum;
  char stat, changealpha;
cout<<"Enter name of second data file"<<endl;
  cin>>filename;
  infile2.open(filename.c_str());
  infile2>>id;
  while (getline(infile2))
    {
infile2>>stat;
      if (stat=='S')
        {
        infile2>>changealpha;
        }
      else if (stat=='P')
        {
    infile2>>changenum;
        }
      infile2>>id;
    }
  infile2.close();
  for (int i=0; i<n; i++)
    {
  cout<<id<<stat<<changealpha<<changenum<<endl;
}
}

输出读取

45 P 19
45 P 19
45 P 19
45 P 19

我尝试过重写代码并在线查找基本功能和eof。帮助

1 个答案:

答案 0 :(得分:0)

首先:您对getline的使用不正确,您的代码应编译。

while(getline(infile2)) { ... }

infile2ifstream。没有getline的签名需要ifstream&。有一个签名需要ifstreamstring,使用方式如下:

stringstream buffer;
while(getline(infile2, line)) {
    buffer << line;
    buffer >> id >> stat;
    // ...
    buffer.clear() // to reset for next iteration
}

第二:您收到的输出是for循环指示的输出。

for (int i=0; i<n; i++) {
    cout << id << stat << changealpha << changenum << endl;
}

这个for循环,如果您使用getline是正确的,将输出30 P F,即最后一行n次的数据。它不会输出n list2的不同索引。原因是您的变量在while循环的每次迭代时都会重置,并且由于您的for循环在while循环后运行,因此只会输出最后一行

第三:您的if-else-if条件指示输入文件以外的其他内容。

if(stat == 'S') {
    infile2 >> changealpha; // 'changealpha' is a 'char'
} else if(stat == 'P') {
    infile2 >> changenum;   // 'changenum' is an 'int'
}

以上逻辑不符合输入文件的格式:

45 P 19 // 'stat' is P suggests 'int'  - correct
11 S 56 // 'stat' is S suggests 'char' - ??? - there are 3 chars after S (' ', '5', '6')?
45 S F  // 'stat' is S suggests 'char' - correct
30 P F  // 'stat' is P suggests 'int'  - ??? - do you want the ASCII char code of 'F'?