Автор Тема: Програмирование на C++  (Прочитано 76319 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Heidr

  • Пользователь
  • Сообщений: 6472
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #480 : 18 Июль 2014, 05:48:08 »
Heidr, , легче использовать
getline(fileIn,strBuff);
Он читает всё строку целиком, а не по словам.
Если понадобится считывать числа, то getline не пойдёт. Не разбирать же потом строки на символы и выискивать там числа.
Потому что в конце не было чего считывать и оператор >> ничего не сделал с старым содержимым (никто же не говорил что если не будет чего считывать то строка станет пустой, верно?).
Но после считывания последнего слова программа натыкается на EOF, и в while условие становится ложным, соответственно, ещё раз слово вывестись не должно.

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #481 : 18 Июль 2014, 21:45:53 »
Цитата: Heidr
Если понадобится считывать числа, то getline не пойдёт. Не разбирать же потом строки на символы и выискивать там числа

Однобоко смотришь, а если тебе надо считать 100500 чисел из файла будешь вот так по байтику почитывать и парсить? Правда это тебя пока волновать не должно, я всего лишь намекаю что вариант считать строку и потом парсить тоже вполне нормальный.
Цитата: Heidr
Но после считывания последнего слова программа натыкается на EOF, и в while условие становится ложным, соответственно, ещё раз слово вывестись не должно.

Подсказка 1: чтение с потока игнорирует пробелы и переводы строк, дальше надеюсь ты сам откроешь отладчик и посмотришь что происходит с состоянием потока.
Подсказка 2: http://www.cplusplus.com/reference/ios/ios/fail/

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9372
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #482 : 18 Июль 2014, 23:58:05 »
Цитата: gepar
дальше надеюсь ты сам откроешь отладчик и посмотришь что происходит с состоянием потока
во во, а то у  меня сложилось впечатление, что Heidr дебагером принципиально не хочет пользоваться ;)

Оффлайн Heidr

  • Пользователь
  • Сообщений: 6472
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #483 : 19 Июль 2014, 06:40:52 »
Не дошёл я ещё до изучения отладчика.

В текстовом файле в конце был переход на новую строку, если его убрать, то последнее слово выводится один раз. Значит, перевод строки не проигнорировался? Если добавить ещё пустых строк или строк из пробелов, то слово всё равно выводится дважды.
а если тебе надо считать 100500 чисел из файла будешь вот так по байтику почитывать и парсить?
Почему по байтику? В числовые переменные и буду считывать сразу.

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #484 : 19 Июль 2014, 10:07:28 »
Цитата: Heidr
Почему по байтику? В числовые переменные и буду считывать сразу.

А вдруг там 1 2 3 xyj 4 5 6 ?

Цитата: Heidr
Не дошёл я ещё до изучения отладчика.

Это не относиться к с++ как к таковому, это не возможности языка, не жди главу в книге по поводу того как в vs6 или bc3 можно использовать отладчик, они мало пользы тебе принесут если даже будут.

Цитата: Heidr
Значит, перевод строки не проигнорировался?

Цитата: gepar
: чтение с потока игнорирует пробелы и переводы строк

А вот ты ещё раз подумай: мы считывали значения и в конце файла остался ещё пробел значит это ещё не конец файла (там же ж пробел), но с другой стороны при след. чтении раз там пробел то мы его игнорируем и узнаём что кроме пробела там ничего и нету значит и считывать в строку нам нечего. Если ты всё равно не понял то не зацикливайся, запиши где-то в свой TODO списочек к чему вернуться через пару недель, возможно позже когда лучше ознакомишься с концепцией потоков и таки захочешь пройти по той ссылке что я дал (ты же туда не ходил, а если ходил то глянул что там какие-то флаги и английский, сказал фу, и закрыл, я уверен) тебе станет понятнее :)

Оффлайн cviten

  • Пользователь
  • Сообщений: 106
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #485 : 19 Июль 2014, 11:57:37 »
Я всё-таки советую поставить компилятор с графической оболочкой. С ней действительно будет проще.

Microsoft Visual Studio 2012 (Express-версия беспатная)
Eclipse for C/C++
Code::Blocks

И, кстати:
Цитата: http://tdm-gcc.tdragon.net/quirks
TDM-GCC doesn't link your programs with the libgcc or libstdc++ runtime DLLs by default.
То, что у них всё работает на последней VS, ещё не значит, то что у них нет warning, которые на других копиляторах считаются ошибками.

Оффлайн Heidr

  • Пользователь
  • Сообщений: 6472
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #486 : 19 Июль 2014, 12:15:22 »
ты же туда не ходил, а если ходил то глянул что там какие-то флаги и английский, сказал фу, и закрыл, я уверен
Ну почему же, ходил и даже закрыть не успел. Просто не понял, как написанное там поможет, ведь ошибок чтения вроде как нет.
Я всё-таки советую поставить компилятор с графической оболочкой. С ней действительно будет проще.
Я когда-то пробовал ставить Eclipse и Code::Blocks, что-то не получилось, не помню, что именно. Может, потом попробую ещё, если буду писать что-нибудь большое. А Visual Studio не подходит,так как иногда работаю на ноутбуке с убунтой, и нужна кроссплатформенность. Да и удобнее не создавать проект и выбирать его параметры, а просто открыть исходник и компилировать.

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #487 : 19 Июль 2014, 13:54:13 »
Цитата: Heidr
Ну почему же, ходил и даже закрыть не успел. Просто не понял, как написанное там поможет, ведь ошибок чтения вроде как нет.

А ты попробуй подставить проверку перед тем как выводить полученный текст.

Добавлено позже:
Цитата: Heidr
Я когда-то пробовал ставить Eclipse и Code::Blocks, что-то не получилось, не помню, что именно.

Ну в первом случае предположу что у тебя java нет, а во втором предположу что скачал ты его без gcc и когда тот попросил указать путь к gcc ты испугался и закрыл его.
Цитата: Heidr
А Visual Studio не подходит,так как иногда работаю на ноутбуке с убунтой, и нужна кроссплатформенность.

Да, это проблема конечно, тупой майкрософт со своими потоками и дурацкими циклами forMS(intMS i=0 ..., всё у них не как у людей!
Цитата: Heidr
Да и удобнее не создавать проект и выбирать его параметры, а просто открыть исходник и компилировать.

Вот-вот, компилятор MS же не умеет компилить один файл, тупой майкрософт и тупой виндовс.
</sarcasm>
Срсли ты хоть разберись сначала прежде чем писать такую белеберду :-\

Оффлайн Heidr

  • Пользователь
  • Сообщений: 6472
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #488 : 19 Июль 2014, 15:01:38 »
Ну что за люди в русском интернете? Спросишь совета по какому-нибудь мелкому вопросу, и хрен кто поможет. Зато поржать все горазды.

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #489 : 19 Июль 2014, 15:33:40 »
Heidr, да-да, мы прям хохочем только так, очень смешно написано. Тебе же уже посоветовали  поставить ide - ты поставил? Тебе советовали запустить отладчик и посмотреть когда меняются флаги - ты запустил? Тебе посоветовали почитать статью про состояние потока и добавить проверку состояния потока - ты это сделал? Нет, тебе непонятно, ты просишь объяснить, но объяснения тебе тоже непонятны и делать ты ничего предложенного не хочешь и вообще все мы злые такие и плохие.
Ещё раз по пунктам:
1)Проект в ide это формальность, хочешь держать код в одном файле так никакая ide этому мешать не будет. CodeBlocks так вообще мультиплатформенный, можешь его проекты хоть на маке открывать (и снова я жую за тебя потому что ты не соизволил даже зайти на сайт и посмотреть что тебе предложили выше).
2)Стандарт с++ на то и стандарт что твои хелло ворлды по книге будут компилироваться любыми современными компиляторами на любых платформах.
3)
fileIn >> strBuff; // Here we read in a word
if (!fileIn.fail())
cout << strBuff << " "; // Now we're simply regurgitating the word we read in to the screen
неужели ты правда не мог написать это сам если бы прошёл по той ссылке?

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9372
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #490 : 19 Июль 2014, 16:07:25 »
Цитата: Heidr
Ну что за люди в русском интернете? Спросишь совета по какому-нибудь мелкому вопросу, и хрен кто поможет.

нормальные люди.
и совет тебе дали самый нормальный - поставить IDE с которым будет видно как на ладони то, как же работает твой код.
но совет тебе не нужен, тебе нужен тупо ответ, готовое решение, из серии "я не хочу сам ковыряться и разбираться что же у меня не так, так что скажите что сделать чтоб было так".
а потом к гадалке не ходи еще раз так же "спросишь совета", а потом еще, и еще, вместо того чтобы один раз разобраться как что-то работает или научиться чему-то.

Оффлайн Heidr

  • Пользователь
  • Сообщений: 6472
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #491 : 19 Июль 2014, 16:20:20 »
неужели ты правда не мог написать это сам если бы прошёл по той ссылке?
Я это не совсем так написал.

А плагин-отладчик можно и к моей IDE поставить. Я раньше отладчиками не пользовался, в университете один семестр преподавали C++, просто рассказывая об основных функциях, а потом несколько семестров давали задания на решение дифференциальных уравнений. Если что-то не так работало, приходилось искать баги непосредственно в коде.
а потом к гадалке не ходи еще раз так же "спросишь совета", а потом еще, и еще, вместо того чтобы один раз разобраться как что-то работает или научиться чему-то.
Не переживайте, не буду больше спрашивать.

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #492 : 19 Июль 2014, 20:57:45 »
Цитата: Heidr
Если что-то не так работало, приходилось искать баги непосредственно в коде.

Отладчик для этого и сделан, просто начни им пользоваться, отговорка "я в книге ещё до этого не дошёл" не подходит, а если в книге этого нет или знания устарели? Если будешь идти строго по книге то с большой вероятностью получишь такие же "узкие" знания как и после курса программирования в универе.
Цитата: Heidr
Не переживайте, не буду больше спрашивать.

Так мы и не переживаем, ты ведь нам одолжение этим не делаешь, лол. И только не надо пожалуйста снова о плохих русских форумах и т.д и т.п, ты спросил - мы тебя направили на протоптанную дорожку и сказали что почитать, почему возникла проблема и что поставить, но ты же не разобравшись с ответами начинаешь спрашивать то же самое перекрутив и вобще хочешь найти какой-то свой ограниченный путь с мультиплатформой и без отладчиков - пожалуйста, но и своё фе тогда нечего высказывать :)

Оффлайн Skay

  • Пользователь
  • Сообщений: 4115
  • Пол: Мужской
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #493 : 19 Июль 2014, 21:39:15 »
Цитата: Heidr
Ну что за люди в русском интернете? Спросишь совета по какому-нибудь мелкому вопросу, и хрен кто поможет. Зато поржать все горазды.

Это вообще в среде кодеров так) особенно в C++, если почитать коменты складывается впечатление что на нем никто правильно не умеет писать  :lol:
во нашел, на эту тему даже статья была) http://habrahabr.ru/post/178747/

Оффлайн Thrushbeard

  • Пользователь
  • Сообщений: 41
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #494 : 22 Июль 2014, 08:52:08 »
Для того чтобы использовать UTF-8 в C++ приложении на Windows необходимо будет перегонять UTF-8 в UTF-16, так как Windows понимает в своих API только юникод кодировку UTF-16, а не UTF-8. Вариантов обычно несколько:
1) Перегнать исходные данные из UTF-8  в UTF-16 заранее
2) При чтении данных использовать MultiByteToWideChar и хранить всё в wstring (нативно выводится в консоль без проблем)
3) libiconv
4) Использовать какой-нибудь Qt, Boost или ещё какой фреймфорк, где есть встроенные функции для работы с UTF-8

Постфиксные и префиксные де/инкременты - это легко. Префиксные меняют значение переменной, и возвращают изменённый результат. Постфиксные возвращают значение переменной,  а потом меняют её значение. Есть один подвох, когда в выражении несколько пост/префиксных инкрементов или декрементов одной переменной, то можно получить "неопределённое поведение", как было у Heidr, это связано с хранением переменных на стеке.