2011-04-11 30 views
5

tengo dificultades para entender cómo pasar un archivo a una función.¿Cómo pasar un archivo a una función?

tengo un archivo con 20 nombres y 20 puntajes de prueba que debe leer una función. la función luego asignará los nombres y puntajes a una estructura llamada estudiante.

mi pregunta es cómo voy a escribir una llamada a la función con los parámetros apropiados. ? para hacer que mi función lea los datos en el archivo. Gracias.

CÓDIGO

// 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

¿cuál es el problema que enfrenta con su código actual? Me parece que estás pasando los parámetros correctamente. – iammilind

Respuesta

0

La referencia al objeto de archivo parece estar bien, pero la variedad de objetos StudentType tal vez mal. Prueba esto:

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

El camino se pasa un ifstream en la función está perfectamente bien.

Sospecho que el problema radica en la forma en que está administrando su matriz de StudentType y su tamaño (numStudents). Le recomendaría cambiar su código para usar un std::vector en lugar de una matriz sin formato. En general, siempre deberías preferir los vectores sobre las matrices, a menos que tengas una buena razón para usar una matriz.

vectores pueden crecer para acomodar más datos y realizar un seguimiento de su tamaño, por lo que no es necesario.

Además, es una buena idea que las funciones devuelvan objetos en lugar de modificar los objetos que pasan a través de la lista de parámetros.

#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

Esto tiene un olor a tarea; es posible que el OP no haya podido usar vectores y se le haya dicho que use matrices en bruto ... y la pregunta tiene 2 años en este momento. – Casey

Cuestiones relacionadas