¿Cómo me salto la primera línea de una matriz cuando leo un archivo?

Estoy intentando leer valores de un archivo de texto y luego pegarlos en una matriz. El archivo de texto que estoy usando es así;

Big Stone Gap,VA Red-tailed_Hawk 1 Mourning_Dove 66 Red-bellied_Woodpecker 5 Yellow-bellied_Sapsucker 1 Downy_Woodpecker 4 Pileated_Woodpecker 2 Blue_Jay 8 American_Crow 89 Carolina_Chickadee 8 Black-capped_Chickadee 6 Tufted_Titmouse 12 Red-breasted_Nuthatch 2 White-breasted_Nuthatch 9 Carolina_Wren 3 American_Robin 1 Northern_Mockingbird 1 European_Starling 5 Eastern_Towhee 3 Field_Sparrow 13 Fox_Sparrow 1 Song_Sparrow 8 White-throated_Sparrow 11 Dark-eyed_Junco 9 Northern_Cardinal 30 Purple_Finch 7 House_Finch 6 American_Goldfinch 29 

Estoy tratando de leerlos en una matriz y luego generar la matriz. Tengo que hacer otras cosas, (alterar los valores de entrada del usuario), pero sé cómo hacerlo. Mi problema es este; Cuando lo ejecuto, lee Big and Stone y los pone en los valores. Esto no es lo que quiero; Debe ser algo como Red_Tailed_Hawk y 1 . Tengo mi código a continuación; No tengo idea de qué hacer para que funcione correctamente. Por favor, disculpe algunas de las variables; Canibalicé este script de otro proyecto que hice con arreglos int en lugar de arreglos de cadenas.

 #include  #include  #include  using namespace std; const int NUMBER_OF_STUDENTS = 28; const int NUMBER_OF_SCORES = 28; void getData (ifstream& infile, string matrix[][NUMBER_OF_SCORES + 1 ], int NUMBER_OF_STUDENTS) ; void printMatrix(string matrix[][NUMBER_OF_SCORES + 1], int NUMBER_OF_STUDENTS); int main() { string birdarray [NUMBER_OF_STUDENTS][NUMBER_OF_SCORES +1 ] ; // column 0 will hold the student ID. // row n has the ID and birdarray for student n. ifstream inData; //input file stream variable inData.open("one.txt"); if ( !inData) { cout << "invalid file name \n"; return 1; } // input the birdarray into two-D array birdarray getData ( inData , birdarray, NUMBER_OF_STUDENTS ); printMatrix(birdarray, NUMBER_OF_STUDENTS); // return the row number of a searchItem in a particular column. // if not found, return -1 } void getData (ifstream& infile,string chart[][NUMBER_OF_SCORES + 1 ], int student_count) { int row, col; for ( row = 0; row < student_count; row++) for (col =0; col > chart [row] [col] ; } void printMatrix(string matrix[][NUMBER_OF_SCORES + 1], int NUMBER_OF_STUDENTS) { int row, col; //this code below is to loop it so it displays all the values // for (row = 0; row < NUMBER_OF_STUDENTS + 1; col++) // { // cout << right << matrix[row][col]; // cout << endl; //} //this is just some test code to see if it can output certain values right cout << matrix[0][2]; cout << matrix[0][3]; cout << matrix[0][4]; cout << matrix[0][5]; } 

 string line; getline(infile, line) for ( row = 0; row < row_count; row++) for (col =0; col < column_count +1 ; col++) getline(infile, line); chart[row][col] = line; 

Los arroyos se comportan como su tocayo. No puedes omitir lo que viene en la stream como saltar a través de una matriz, todo lo que puedes hacer es ignorar las cosas mientras flota.

Aquí hay una respuesta: ¿Cómo leo un archivo de texto de la segunda línea usando fstream?

Solo lee la primera línea antes de hacer la llamada getData.

Puede omitir la primera línea con lo siguiente:

 inData.ignore(numeric_limits::max(), inData.widen('\n')); 

std :: istream :: ignore reference: http://www.cplusplus.com/reference/istream/istream/ignore/

PD. El primer parámetro es un número máximo de caracteres a ignorar. numeric_limits :: max () significa que desea ignorar hasta que la cadena termine, sin importar qué tan larga sea la cadena.

Puede usar la función seekg () que mueve el FPM (es decir, el marcador de posición de archivo) cualquier cantidad de espacio que desee. Esa es probablemente la forma más fácil de hacerlo.

Desde tu código se vería algo así como

 inData.seekg(16, std::ios::beg) //Seeks past 16 character in the file