Я создаю искусство 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);
}
AFAIR оператор >> по умолчанию пропускает символ новой строки. Если вы хотите также прочитать пробелы, то перед чтением символов вы должны добавить noskipws
.
Pic_File >> std::noskipws;
Отформатированный оператор ввода пропускает ведущие пробелы. Очистка флага формата std::ios_base::skipws
для потока, например, с помощью манипулятора std::noskipws
, позволяет избежать пропусков пробелов.
Я предпочел бы нам неформатированные операции ввода, например, один из элементов std::istream::get()
или std::getline()
.
std::string
s являются объектами и не вызываются. А какой у тебя вопрос? Что-то, что я забыл упомянуть: не используйте eof()
для управления циклом ввода! Не работает! Вместо этого используйте преобразование потока в bool
чтобы проверить после ввода, что оно прошло успешно.