Я не могу определить конечный символ \ n в моем операторе if

0

Я создаю искусство ASCII для игры, и мой fstream не получает '\n' (используя char) в моей инструкции if для удаления из потока. Кажется простым, но я озадачен этим сейчас. Любой ключ?

void pic_maker(ifstream &Pic_file, string P_Name, int x, int y, int t)
{
Pic_file.open(P_Name);
int margin = 0;
coordinate(x, y);
char pic_info;
Pic_File >> pic_info;

while (!Pic_File.eof())
{
    while (pic_info == '?')
    {
        Pic_File >> pic_info; //ADDS SPACES TO IMAGE BY REPLACING ?
        cout << " ";
    }
    if (pic_info == '0') //RETURNS TO NEW LINE
    {
        Pic_File >> pic_info;
        y++;
        coordinate(x, y);
    }
    if (pic_info == '\n') //MY PROBLEM! DOESN'T RECOGNIZE \n
    {
        Pic_File >> pic_info;
    }
    cout << pic_info;
    Pic_file >> pic_info;
}

Sleep(t);
}
Теги:
string
char

2 ответа

6
Лучший ответ

AFAIR оператор >> по умолчанию пропускает символ новой строки. Если вы хотите также прочитать пробелы, то перед чтением символов вы должны добавить noskipws.

Pic_File >> std::noskipws;
  • 0
    Спасибо! Это спасло еще много проблем, которые я пытался решить, и даже больше!
0

Отформатированный оператор ввода пропускает ведущие пробелы. Очистка флага формата std::ios_base::skipws для потока, например, с помощью манипулятора std::noskipws, позволяет избежать пропусков пробелов.

Я предпочел бы нам неформатированные операции ввода, например, один из элементов std::istream::get() или std::getline().

  • 0
    Спасибо. Getline () может быть более эффективным. Еще один вопрос. Чтобы упростить мой функциональный процесс, я хочу вызвать строку, ссылаясь на функцию fstream .open ("бла") через имя моей функции..void pic_maker (ifstream & Pic_file, строка P_Name, int x, int y, int t) как необходимо Я использую Pic_file.open (P_Name)?
  • 0
    @ user3027652: std::string s являются объектами и не вызываются. А какой у тебя вопрос? Что-то, что я забыл упомянуть: не используйте eof() для управления циклом ввода! Не работает! Вместо этого используйте преобразование потока в bool чтобы проверить после ввода, что оно прошло успешно.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню