2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 пробельные символы в C++
Сообщение06.03.2009, 13:01 
Аватара пользователя


23/01/08
565
Интересует, какие символы может содержать пустая на вид строка. Например, может быть просто символ новой строки '\n', могут быть пробелы ' ' или '\t'. А еще что-нибудь может быть?

 Профиль  
                  
 
 
Сообщение06.03.2009, 20:26 


23/12/08
245
Украина
у меня не увидело в консоле 7,8,9,10,32 символы.
___________-
не знал что в консоле есть смайлики :D :D

Добавлено спустя 2 минуты 11 секунд:

ах ну да ещо -1 символ не увидело))
__________
интересно зачем в консоле комуто нужны были обозначения для мастей))

 Профиль  
                  
 
 
Сообщение07.03.2009, 14:19 
Аватара пользователя


23/01/08
565
Я имел ввиду текстовые файлы. Не понял, что за символ '-1'? :) . Пока что нашел такие символы: '\t', '\f', '\n', '\v', '\0'. Кстати, а EOF (конец файла) - это тоже как бы символ? Если да, то как он обозначается?

 Профиль  
                  
 
 
Сообщение07.03.2009, 14:26 
Заслуженный участник


11/05/08
32166
Spook в сообщении #192644 писал(а):
Кстати, а EOF (конец файла) - это тоже как бы символ? Если да, то как он обозначается?

EOF -- это код 26, отображается стрелочкой вправо.

 Профиль  
                  
 
 
Сообщение07.03.2009, 17:31 


21/03/06
1545
Москва
EOF - это признак конца файла, может иметь произвольный код, но обычно 255 (-1).
код 26, если не ошибаюсь, это либо перенос строки, либо возврат каретки.

Добавлено спустя 23 секунды:

Вообще найдите таблицу ASСII и комментарии к ней.

 Профиль  
                  
 
 
Сообщение07.03.2009, 17:39 
Экс-модератор


17/06/06
5004
e2e4 в сообщении #192730 писал(а):
код 26, если не ошибаюсь, это либо перенос строки, либо возврат каретки.
Не-не-не. CR и LF - это 10 и 13 (не помню, в том ли порядке).

 Профиль  
                  
 
 
Сообщение07.03.2009, 17:48 
Заслуженный участник


15/05/05
3445
USA
Кодом 26 (он же '\032') в MS DOS обозначается конец текстового файла. Этот символ формируется системой автоматически, если файл открыт в текстовом режиме. Запись/чтение этого символа имеют смысл только при работе с файлом в двоичном режиме.

 Профиль  
                  
 
 
Сообщение07.03.2009, 19:01 


23/12/08
245
Украина
Spook писал(а):
Я имел ввиду текстовые файлы. Не понял, что за символ '-1'? :) . Пока что нашел такие символы: '\t', '\f', '\n', '\v', '\0'. Кстати, а EOF (конец файла) - это тоже как бы символ? Если да, то как он обозначается?

ну я прогнал переменную типа $char$ в цыкле по всем ее значениям. Вот и получил что при значении -1 она не отображается в консоле.

 Профиль  
                  
 
 
Сообщение07.03.2009, 19:52 


21/03/06
1545
Москва
AD писал(а):
e2e4 в сообщении #192730 писал(а):
код 26, если не ошибаюсь, это либо перенос строки, либо возврат каретки.
Не-не-не. CR и LF - это 10 и 13 (не помню, в том ли порядке).

Точно, забыл уже :).

Точно помню, что в UNIX, в отличе от MS-DOS, один из этих симоволов не использовался, что порождало проблемы при работе с текстовыми файлами при переносе из одной системы в другую.

И, по-моему, была аналогичная заморочка с параметрами CGI-скрипта в www. В общем, совершенно никому ненужные заморочки, портящие кровь программистам.

 Профиль  
                  
 
 Re: пробельные символы в C++
Сообщение08.03.2009, 02:11 


09/02/09
90
Novosibirsk
Spook писал(а):
Интересует, какие символы может содержать пустая на вид строка.

Это сильно зависит от используемого устройства вывода и применяемого набора символов.
Одна и та-же строка может по-разному выглядеть даже в разных текстовых редакторах, не говоря уж о принтерах или алфавитно-цифровых терминалах.
К тому же язык С вовсе не требует применять для представления текстов именно код ASCII.

Символ под названием EOF есть в ASCII, но это совсем не то значение, которое возвращает функция, скажем, int getchar(void); при достижении конца файла. В самом языке С никакого символа EOF вообще нет. Есть константа с таким именем, определённая обычно в файле stdio.h. Эта константа специально выбрана так, что "не лезет" в переменную типа char и не может быть спутана ни с каким "нормальным" символом, а функция getchar() по этой причине возвращает значение типа int, а не char.

 Профиль  
                  
 
 
Сообщение20.03.2009, 01:02 
Аватара пользователя


23/01/08
565
Спасибо, программу написал. За пробельные символы считал только '\0', ' ', '\t', так как даже вертикальная табуляция в MS Studio 2008 почему-то не заработала.

Yuri Gendelman писал(а):
Запись/чтение этого символа имеют смысл только при работе с файлом в двоичном режиме.
А я его читал и пытался записать. При этом у меня в файле появлялись карточные масти :!: . Думал сначала, что запрограммировался окончательно, но это все-таки на самом деле были они :D

Один момент остался непонятен, хотя немножко не по теме. Если на вход программы подать пустой файл или задать несуществующий файл, возможно ли, что будет возвращено NULL? Просто я использовал такую проверку:
Код:
   
inFile.open(filename);
if (inFile.is_open() == 0)   return 0;
То есть я предполагаю, что указатель куда-нибудь да указывает (а NULL не может указывать ни на какой объект).

 Профиль  
                  
 
 
Сообщение20.03.2009, 13:55 
Заслуженный участник


15/05/05
3445
USA
Spook писал(а):
Если на вход программы подать пустой файл или задать несуществующий файл, возможно ли, что будет возвращено NULL?
Пустой файл и несуществующий файл - это две большие разницы. Только если файл не существует, системный вызов внутри inFile.open() вернет NULL, а is_open() - false. Чтобы проверить, не пуст ли существующий открытый файл, проверьте его длину.

 Профиль  
                  
 
 
Сообщение21.03.2009, 00:46 
Аватара пользователя


23/01/08
565
Yuri Gendelman, а гарантируется ли корректная работа inFile.open()? Например, если подать искусственно ей NULL, то программа вылетает. Непонятно, как это будет представлено в реальности (и возможно ли это), так как и отсутствующий файл и пустой файл обрабатываются нормально.

 Профиль  
                  
 
 
Сообщение21.03.2009, 16:36 
Заслуженный участник


15/05/05
3445
USA
Spook писал(а):
Yuri Gendelman, а гарантируется ли корректная работа inFile.open()? Например, если подать искусственно ей NULL, то программа вылетает.
Вы что, задаете NULL вместо имени файла? На месте программы я бы тоже вылетел...
В документации для каждой функции должен быть список исключений, которые она может генерировать. Используйте try-catch для их перехвата и анализа. Или проверяйте параметры перед вызовом.
"Гарантии Вам даст только страховой полис". Но оператор открытия файла протестирован в миллионах программ.

 Профиль  
                  
 
 
Сообщение23.03.2009, 15:22 
Аватара пользователя


23/01/08
565
Так вот я и спрашивал, мб ли случится такое, что вместо имени файла передастся NULL? Я в общем-то добавил еще одну строчку кода для проверки на NULL, просто почему-то кажется, что она излишняя.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group