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, Супермодераторы



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

Сейчас этот форум просматривают: mihaild


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

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