编程不将部件打印到输出文件C ++中

时间:2017-02-20 22:26:24

标签: c++ file-io output

我一直试图解决这个问题一段时间,似乎我尝试的一切都让它变得更糟。我正在设计一个程序,它读取输入文件,进行计算,并打印到输出文件。 (它是各种等级计算器)现在我只是想让它在输入中为每一行显示输出中的名称和ID号。

#include <iostream>
#include <fstream>
#include <cstring>
#include <sstream>

using namespace std;

float printRecord ( char name[20], char Id[20], ostream& outfile)
{
outfile << name << " " << Id << endl;
return 0;
}

int main()
{
ofstream outfile;
ifstream infile; 

std::string line;

char file_nameI[21], file_nameO[21], name[20], Id[20];

float  hworkgrade, grade1;
int deductions;

cout << "Please enter name of input file:  ";
cin >> file_nameI;
infile.open(file_nameI);
if ( !infile)
{
  cout << "Could not open input file \n";
  return 0;
}

cout << "Please enter name of output file:  ";
cin >> file_nameO;
infile.open(file_nameO);
if ( !outfile)
{
  cout << "Could not open output file \n";
  return 0;
}

  while (getline (infile, line))
  {
  istringstream iss(line);
  iss >> name >> Id;
  cout<< name << " " << Id;
  printRecord(name, Id, outfile);
  cin.ignore();
  }

  return 0;

  }

这是输入

Truman, Tod 12388671 100 100 100 
Seger,John 67894 100 100 100 100
Victoire,Susan 938442 0 0 0 
Kodak,James 554668 101 100 100
Frence,Lauren 602983 -1 100 100
Hanz, Franz 58027201 100 100 100
Laufeson,Loki 7920100 34 59 24 

这是输出:

 12388671
Seger,John 67894
Victoire,Susan 938442
Kodak,James 554668
Frence,Lauren 602983
 58027201
Laufeson,Loki 7920100

它会跳过第一个和第六个名字。

我尝试将变量更改为字符串变量,更改循环的顺序,将名称设置为两个变量(第一个和最后一个)

非常感谢任何帮助

1 个答案:

答案 0 :(得分:1)

不同之处在于,对于这两个输入行,名称之间有一个空格。

比较

Truman, Tod 12388671 100 100 100 
Seger,John 67894 100 100 100 100

由于istringstream::operator>>读取到一个空格,它将在读取第一个字符串时停在该空间,并将在第二个字符串中接收名称的第二部分而不是数字。

该解决方案可使您的数据保持一致,或在解析行时允许存在或不存在空间。

你还有另一个拼写错误会导致你的示例代码无法使用。您永远不会打开输出文件。你打开输入文件两次!!

infile.open(file_nameO); =&gt; outfile.open(file_nameO);

一些固定代码

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

using namespace std;

void printRecord ( const string& name, const string& Id, ostream& outfile) {
    outfile << name << " " << Id << endl; }

int main() {
    string line;
    string file_nameI, file_nameO;

    cout << "Please enter name of input file:  ";
    //cin >> file_nameI;
    file_nameI = "grades.txt";
    cout << file_nameI << '\n';
    ifstream infile(file_nameI.c_str());
    if ( !infile)
    {
        cout << "Could not open input file \n";
        return 0;
    }

    cout << "Please enter name of output file:  ";
    //cin >> file_nameO;
    file_nameO = "gradesout.txt";
    cout << file_nameO << '\n';

    ofstream outfile(file_nameO.c_str());
    if ( !outfile)
    {
        cout << "Could not open output file \n";
        return 0;
    }

    while (getline (infile, line))
    {
        string name, id;
        istringstream iss(line);
        iss >> name >> id;
        cout << name << " " << id;
        printRecord(name, id, outfile);
        cin.ignore();
    } }