2010-04-01 6 views
5

Sto leggendo un file in un array. Sta leggendo ogni carattere, il problema sorge nel senso che legge anche una nuova riga nel file di testo.È necessario saltare il carattere di nuova riga ( n) dal file di input

Si tratta di una scheda di sudoku, Ecco il mio codice per la lettura nel char:

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; 
} 

come ho detto, legge il file, viene visualizzato sullo schermo, non solo in ordine corretto quando incontra la \ n

+0

Tag la questione come compito a casa se si tratta di una domanda compiti a casa. – wilhelmtell

risposta

0

Bene nel tuo formato di file puoi semplicemente non salvare le nuove righe, oppure puoi aggiungere un ins.get() al ciclo for.

Si potrebbe anche avvolgere c = ins.get() in una funzione come getNextChar() che salterà su qualsiasi nuova riga.

Penso che si desidera qualcosa di simile:

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

potresti essere un po 'più specifico? praticamente un n00b qui. Forse non mi sono spiegato bene - Ho bisogno di saltare la nuova riga ogni volta che la incontra e non la scrivo nell'elemento dell'array ... – codefail

+0

@igor: Sì, lo sarò ma ho una domanda per prima cosa, il file ha una nuova riga dopo ogni riga? –

+0

Sì, ma immagino (dato che questo verrà inviato ad un "autografo") che la nuova riga può essere ovunque? Ma certo, lascia andare con la nozione che una nuova riga è solo dopo ogni riga .. – codefail

2

È possibile mettere ins.get() in un ciclo Do While:

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

Avete alcune buone opzioni. O non salvare la nuova riga nel file, scartarle esplicitamente nel ciclo o utilizzare std::getline() in <string>.

Ad esempio, utilizzando 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()); 
} 
Problemi correlati