2010-04-01 3 views
5

Я читаю файл в массив. Он читает каждый символ, возникает проблема в том, что он также читает новую строку в текстовом файле.Нужно пропустить символ новой строки ( n) из входного файла

Это судоку доска, вот мой код для чтения в полукокса:

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

, как я сказал, он читает файл, отображается на экране, просто не в правильном порядке, когда он встречает \ n

+0

Тэг вопрос в качестве домашнего задания, если это домашнее задание вопрос. – wilhelmtell

ответ

0

Ну, в вашем формате файла вы можете просто не сохранять строки новой строки, или вы можете добавить int.get() цикл for.

Вы можете также обернуть свой c = ins.get() в функции, подобной getNextChar(), которая пропустит любую новую строку.

Я думаю, что вы хотите что-то вроде этого:

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

не могли бы вы быть более конкретными? здесь почти n00b. Возможно, я не очень хорошо себя объяснил - Мне нужно, чтобы он пропускал новую строку всякий раз, когда сталкивался с ней, и не записывал ее в элемент массива ... – codefail

+0

@igor: Да, я буду, но у меня есть вопрос во-первых, имеет ли файл новую строку после каждой строки? –

+0

Да, но я представляю (как это будет отправлено «автогрейдеру»), что новая строка может быть где угодно? Но, конечно, давайте просто пойдем с мыслью, что новая строка только после каждой строки. – codefail

2

Вы можете поставить вас ins.get() в то время цикла дел:

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

У вас есть несколько хороших вариантов. Либо не сохраняйте новую строку в файле, явно отбрасывайте их в своем цикле, либо используйте std::getline() в <string>.

Например, с помощью 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()); 
} 
Смежные вопросы