2010-04-01 9 views
5

Estoy leyendo en un archivo en una matriz. Está leyendo cada char, el problema surge porque también lee una nueva línea en el archivo de texto.Necesito saltear la línea nueva char ( n) desde el archivo de entrada

Este es un tablero de sudoku, aquí es mi código para leer en la carac:

bool loadBoard(Square board[BOARD_SIZE][BOARD_SIZE]) 
{ 
    ifstream ins; 

    if(openFile(ins)){ 

    char c; 

    while(!ins.eof()){ 
     for (int index1 = 0; index1 < BOARD_SIZE; index1++) 
     for (int index2 = 0; index2 < BOARD_SIZE; index2++){ 
      c=ins.get(); 

      if(isdigit(c)){ 
      board[index1][index2].number=(int)(c-'0'); 
      board[index1][index2].permanent=true; 
      } 
     } 
    } 

    return true; 
    } 

    return false; 
} 

como he dicho, se lee el archivo, se muestra en la pantalla, pero no en el orden correcto cuando se encuentra con el \ n

+0

Tag la pregunta de si la tarea es una cuestión tarea. – wilhelmtell

Respuesta

0

Bueno, en su formato de archivo simplemente no puede guardar nuevas líneas, o puede agregar un ins.get() el bucle for.

También podría envolver su c = ins.get() en una función algo así como getNextChar() que omitirá cualquier nueva línea.

Creo que quieres algo como esto:

for (int index1 = 0; index1 < BOARD_SIZE; index1++) 
{ 
    for (int index2 = 0; index2 < BOARD_SIZE; index2++){ 

    //I will leave the implementation of getNextDigit() to you 
    //You would return 0 from that function if you have an end of file 
    //You would skip over any whitespace and non digit char. 
    c=getNextDigit(); 
    if(c == 0) 
    return false; 

    board[index1][index2].number=(int)(c-'0'); 
    board[index1][index2].permanent=true; 
    } 
} 
return true; 
+0

¿podría ser un poco más específico? más o menos un n00b aquí. Tal vez no me explique bien - Lo necesito para omitir la nueva línea siempre que la encuentre y no escribirla en el elemento de la matriz ... – codefail

+0

@igor: Sí, lo seré, pero tengo una pregunta primero, ¿el archivo tiene una línea nueva después de cada fila? –

+0

Sí, pero me imagino (como se enviará a un "autograder") que la nueva línea puede estar en cualquier lugar. Pero claro, vamos con la idea de que una nueva línea es solo después de cada fila ... – codefail

2

Usted puede poner ins.get() en un bucle Do While:

do { 
    c=ins.get(); 
} while(c=='\n'); 
0

usted tiene algunas buenas opciones. O bien, no guarde la nueva línea en el archivo, explícitamente descartarlos en su bucle, o use std::getline() en <string>.

Por ejemplo, el uso de getline():

#include <string> 
#include <algorithm> 
#include <functional> 
#include <cctype> 

using namespace std; 

// ... 

string line; 
for (int index1 = 0; index1 < BOARD_SIZE; index1++) { 
    getline(is, line); // where is is your input stream, e.g. a file 
    if(line.length() != BOARD_SIZE) 
     throw BabyTearsForMommy(); 
    typedef string::iterator striter; 
    striter badpos = find_if(line.begin(), line.end(), 
          not1(ptr_fun<int,int>(isdigit))); 
    if(badpos == line.end()) 
     copy(board[index1], board[index1]+BOARD_SIZE, line.begin()); 
} 
Cuestiones relacionadas