2011-04-11 36 views
5

Tôi gặp khó khăn trong việc hiểu cách chuyển một tệp vào một hàm.Làm cách nào để chuyển một tệp vào một hàm?

tôi có tệp có 20 tên và 20 điểm kiểm tra cần được đọc bởi hàm. sau đó hàm sẽ gán các tên và điểm số cho một cấu trúc gọi là sinh viên.

câu hỏi của tôi là làm thế nào tôi sẽ viết một cuộc gọi hàm với các tham số thích hợp. ? để làm cho hàm của tôi đọc dữ liệu trong tệp. cảm ơn.

// ask user for student file 
cout << "Enter the name of the file for the student data to be read for input" << endl; 
cout << " (Note: The file and path cannot contain spaces)" << endl; 
cout << endl; 
cin >> inFileName; 
inFile.open(inFileName); 
cout << endl; 

// FUNCTION CALL how do i set this up properly? 
ReadStudentData(inFile, student, numStudents); 

void ReadStudentData(ifstream& infile, StudentType student[], int& numStudents) 
{ 
    int index = 0; 
    string lastName, firstName; 
    int testScore; 

    while ((index < numStudents) && 
      (infile >> lastName >> firstName >> testScore)) 
    { 
     if (testScore >= 0 && testScore <= 100) 
     { 
      student[index].studentName = lastName + ", " + firstName; 
      student[index].testScore = testScore; 
      index++; 
     } 
    } 

    numStudents = index; 
} 
+2

sự cố bạn đang gặp phải với mã hiện tại của mình là gì? Tôi thấy rằng, bạn đang chuyển các thông số đúng cách. – iammilind

Trả lời

0

Các tham chiếu đến các đối tượng tập tin có vẻ là tốt, nhưng các mảng StudentType đối tượng có thể sai. Hãy thử cách này:

void ReadStudentData(ifstream& infile, 
std::vector<StudentType>& vecStudents, 
int& numStudents) 
2

Cách bạn vượt qua ifstream cách bạn hoàn thành tốt.

Tôi nghi ngờ rằng vấn đề nằm trong cách bạn đang quản lý mảng StudentType và kích thước của nó (numStudents). Tôi khuyên bạn nên thay đổi mã của mình để sử dụng một số std::vector thay vì một mảng thô. Nói chung, bạn nên luôn luôn thích các vectơ trên mảng trừ khi bạn có một lý do thực sự tốt để sử dụng một mảng.

vectơ có thể phát triển để chứa nhiều dữ liệu hơn và theo dõi kích thước của chúng, vì vậy bạn không phải làm như vậy.

Ngoài ra, ý tưởng hay là các hàm trả về đối tượng thay vì sửa đổi đối tượng được chuyển qua danh sách tham số.

#include <vector> 
using namespace std; 

vector<StudentType> ReadStudentData(ifstream& infile) { 
    vector<StudentType> students; 
    string lastName, firstName; 
    int testScore; 
    while (infile >> lastName >> firstName >> testScore) { 
     if (testScore >= 0 && testScore <= 100) { 
      StudentType student; 
      student.studentName = lastName + ", " + firstName; 
      student.testScore = testScore; 
      students.push_back(student); 
     } 
    } 
    return students; 
} 

// call the function 
vector<StudentType> students = ReadStudentData(infile); 

// or if you have a C++11 compiler 
auto students = ReadStudentData(infile); 

// use students.size() to determine how many students were read 
+0

Điều này có mùi bài tập về nhà với nó; OP có thể không có khả năng sử dụng các vec-tơ và được yêu cầu sử dụng các mảng thô .... và câu hỏi là 2 tuổi vào thời điểm này. – Casey

Các vấn đề liên quan