Я пытаюсь прочитать строки из файла, используя istream& getline
вместо istream& operator
.
CPP результата
#include "Result.h"
Result::Result()
{
Coursename[0] = '\0';
}
Result::Result( const char * nam, unsigned scor )
{
strncpy( Coursename, nam, CourseNameSiz );
score = scor;
}
//istream& getline( istream & input, Result & Re, ',' )
istream & operator >>( istream & input, Result & Re )
{
//getline(Re.Coursename, input, ',');
input >> Re.Coursename >> Re.score;
return input;
}
ostream & operator <<( ostream & os, const Result & Re )
{
os << " Unit Name: " << Re.Coursename << '\n'
<< " Result: " << Re.score << '\n';
return os;
}
int Result::GetScore() const
{
return score;
}
inline void Result::SetScore( unsigned scor )
{
score = scor;
}
заголовок результата
#ifndef RESULT_H
#define RESULT_H
#include <iostream>
#include <string.h>
#include <string>
using namespace std;
const unsigned CourseNameSiz = 10;
class Result
{
public:
Result();
Result( const char * nam, unsigned scor );
int GetScore() const;
// Get the number of s.
void SetScore( unsigned scor );
// Set the number of score.
//string Result:GetCourseName() const;
friend ostream & operator <<( ostream & os, const Result & Re );
//friend istream & getline( istream & input, Result & Re, ',' );
friend istream & operator >>( istream & input, Result & Re );
private:
char Coursename[CourseNameSiz];
//string Coursename[CourseNameSiz]; // Unit name, C style string
int score; // number of scores
string str;
};
#endif // RESULT_H
Все это работает именно так, как я хочу, но мне нужно это изменить, поэтому вместо того, чтобы читать по словам, я хочу использовать istream и getline с разделителем. Большинство комментариев в коде — это моя попытка перейти на метод getline. Я сделал массив строк и в качестве теста попытался поместить в него первый элемент в прочитанном файле, но, очевидно, это не сработало.
Я просто ищу небольшое руководство здесь. заранее спасибо
РЕДАКТИРОВАТЬ :: Входной файл: rinput.txt
31525 1 4
JPN_101 3 Japanese, 90,
ICT 4 example1, 91,
TIC 4 example2, 92,
CIT 4 example3, 93
Итак, там, где написано example1 и 91, это два элемента, для которых я пытаюсь использовать getline с разделителем, потому что я хочу использовать пробелы в моем файле чтения.
Другая информация читается в разных классах, которые я изменю на метод getline, когда заставлю этот работать.
Выходной файл: routput.txt
Student ID: 31525
Semester: 1
Unit: JPN_101
Credits: 3
Unit Name: Japanese
Result: 90
Unit: ICT
Credits: 4
Unit Name: example1
Result: 91
Unit: TIC
Credits: 4
Unit Name: example2
Result: 92
Unit: CIT
Credits: 4
Unit Name: example3
Result: 93
Number of courses = 4
Total credits = 15
Это вывод, когда я использую метод оператора с символами массива.
include\Result.h|28|error: expected identifier before ','|
include\Result.h|28|error: expected ',' or '...' before ','|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|
который указывает на строку файла заголовка 28, которая является friend istream & getline( istream & input, Result & Re, ',' );
Полагаю, я просто не понимаю, почему простое изменение его на массив строк (string Coursename[CourseNameSiz];
), а затем простое изменение метода operator
на метод getline
не просто возвращает ввод, как для метода оператора.
Надеюсь, я правильно объяснил, мне нужно, чтобы кто-то немного перевел это, чтобы помочь мне лучше выразить это.
Спасибо
std::getline
справочника. И, как и сейчас, вам нужно читать дважды. Кроме того,std::getline
читает только строки, вам нужно преобразовать, например, в. целые числа самостоятельно. - person Some programmer dude   schedule 08.04.2015