我一直试图解决这个问题一段时间,似乎我尝试的一切都让它变得更糟。我正在设计一个程序,它读取输入文件,进行计算,并打印到输出文件。 (它是各种等级计算器)现在我只是想让它在输入中为每一行显示输出中的名称和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
它会跳过第一个和第六个名字。
我尝试将变量更改为字符串变量,更改循环的顺序,将名称设置为两个变量(第一个和最后一个)
非常感谢任何帮助
答案 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();
} }