Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Проблема считывания информации из входного потока (cin)
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. В приведённом выше коде, после запроса [i]"Пожалуйста, укажите количество чисел, которые хотите просуммировать: " , программа сразу же завершает свою работу. Подозреваю, что в следующей строке кода: Код: plaintext 1. переменной n из потока повторно считывается символ "|", с помощью которого перед этим был завершён ввод исходных данных (возможно ошибаюсь). Как в C++ правильно обойти эту проблему? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2013, 21:13 |
|
||
|
Проблема считывания информации из входного потока (cin)
|
|||
|---|---|---|---|
|
#18+
CompositumПодозреваю, что в следующей строке кода: Код: plaintext 1. Если возникли подозрения, надо прочитать документацию. istream >> возвращает указатель на поток а вовсе не булево значение "успешно/не успешно". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2013, 21:35 |
|
||
|
Проблема считывания информации из входного потока (cin)
|
|||
|---|---|---|---|
|
#18+
White OwlЕсли возникли подозрения, надо прочитать документацию. istream >> возвращает указатель на поток а вовсе не булево значение "успешно/не успешно". Я делаю по аналогии тому, как пишет в своих примерах Страуструп, а он проверяет именно так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2013, 21:51 |
|
||
|
Проблема считывания информации из входного потока (cin)
|
|||
|---|---|---|---|
|
#18+
CompositumWhite OwlЕсли возникли подозрения, надо прочитать документацию. istream >> возвращает указатель на поток а вовсе не булево значение "успешно/не успешно". Я делаю по аналогии тому, как пишет в своих примерах Страуструп, а он проверяет именно так.Правда? Где? .... [через пять минут] Хм... действительно, есть у него такие примеры. http://www.lib.ru/CPPHB/cpptut.txt В главе 8.8. Видать писалось это еще до реального создания istream класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2013, 23:32 |
|
||
|
Проблема считывания информации из входного потока (cin)
|
|||
|---|---|---|---|
|
#18+
Compositum, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2013, 23:55 |
|
||
|
Проблема считывания информации из входного потока (cin)
|
|||
|---|---|---|---|
|
#18+
White OwlПравда? Где? .... [через пять минут] Хм... действительно, есть у него такие примеры. http://www.lib.ru/CPPHB/cpptut.txt В главе 8.8. Видать писалось это еще до реального создания istream класса. Книга "Программирование. Принципы и практика использования C++. Исправленное издание". На стр. 150 Страуструп рекомендует использовать этот подход и поясняет что к чему. White OwlВидать писалось это еще до реального создания istream класса. Это вряд ли. Вопрос решён. В обозначенной книге на указанной мною странице была ссылка на главу 10.6 (пока не дочитал до неё), где и нашёл ответ. Рабочий вариант такой: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2013, 23:59 |
|
||
|
Проблема считывания информации из входного потока (cin)
|
|||
|---|---|---|---|
|
#18+
White OwlХм... действительно, есть у него такие примеры. http://www.lib.ru/CPPHB/cpptut.txt В главе 8.8. Видать писалось это еще до реального создания istream класса. Думаю тут кое-кому следует тоже почитать доку, прежде чем :) Во-первых, оператор >> (как и <<) возвращает не указатель, а ссылку на поток. Во-вторых, ссылка на поток в булевом контексте (if, while, etc) неявно преобразуется в булево значение, показывающее успешно ли выполнена последняя операция над потоком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2013, 23:59 |
|
||
|
Проблема считывания информации из входного потока (cin)
|
|||
|---|---|---|---|
|
#18+
Если массив небольшой и из середины не удаляют, то лучше вектор, чем лист: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 00:14 |
|
||
|
Проблема считывания информации из входного потока (cin)
|
|||
|---|---|---|---|
|
#18+
лучше вектор, Неее... лучше Не вектор, а valarray ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 00:31 |
|
||
|
Проблема считывания информации из входного потока (cin)
|
|||
|---|---|---|---|
|
#18+
лучше НЕ векторлучше вектор, Неее... лучше Не вектор, а valarray и чем же он лучше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 00:38 |
|
||
|
Проблема считывания информации из входного потока (cin)
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyВо-первых, оператор >> (как и <<) возвращает не указатель, а ссылку на поток.Ну да ссылку, оговорился, виноват.[/quot] Anatoly MoskovskyВо-вторых, ссылка на поток в булевом контексте (if, while, etc) неявно преобразуется в булево значение, показывающее успешно ли выполнена последняя операция над потоком.ээээ.... А это где сказано? И как это сочетается с запретом на возврат значений разных типов из функций с одинаковыми параметрами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 00:39 |
|
||
|
Проблема считывания информации из входного потока (cin)
|
|||
|---|---|---|---|
|
#18+
и чем же он лучше?лучше НЕ векторлучше вектор, Неее... лучше Не вектор, а valarray и чем же он лучше? Он может просуммировать все элементы: http://msdn.microsoft.com/en-us/library/787325a0(v=vs.80).aspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 00:59 |
|
||
|
Проблема считывания информации из входного потока (cin)
|
|||
|---|---|---|---|
|
#18+
valarrayи чем же он лучше?пропущено... и чем же он лучше? Он может просуммировать все элементы: http://msdn.microsoft.com/en-us/library/787325a0(v=vs.80).aspx В данном случае да: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 01:13 |
|
||
|
Проблема считывания информации из входного потока (cin)
|
|||
|---|---|---|---|
|
#18+
White OwlAnatoly MoskovskyВо-вторых, ссылка на поток в булевом контексте (if, while, etc) неявно преобразуется в булево значение, показывающее успешно ли выполнена последняя операция над потоком.ээээ.... А это где сказано? И как это сочетается с запретом на возврат значений разных типов из функций с одинаковыми параметрами? Формально сказано в стандарте: C++0327.4.4.3 basic_ios iostate flags functions [lib.iostate.flags] operator void*() const; Returns: If fail() then a null pointer; otherwise some non-null pointer to indicate success. Неформально можно прочесть тут http://www.parashift.com/c -faq-lite/istream-and-while.html Как сочетается - не знаю, поскольку не вижу как это вообще связано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 01:45 |
|
||
|
Проблема считывания информации из входного потока (cin)
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyКак сочетается - не знаю, поскольку не вижу как это вообще связано. Ну если не видишь, тогда предскажи поведение вот такого кода: if(cin >> a >> b) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 02:16 |
|
||
|
Проблема считывания информации из входного потока (cin)
|
|||
|---|---|---|---|
|
#18+
White OwlНу если не видишь, тогда предскажи поведение вот такого кода: if(cin >> a >> b) if сработает если и a и b успешно считались. Причем здесь функции возвращающие разные типы я все равно не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 02:21 |
|
||
|
Проблема считывания информации из входного потока (cin)
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyWhite OwlНу если не видишь, тогда предскажи поведение вот такого кода: if(cin >> a >> b) if сработает если и a и b успешно считались.А если не успешно? Если обломались на а, то что? А если на b то что? Anatoly MoskovskyПричем здесь функции возвращающие разные типы я все равно не понял. Чтобы if(cin >> a) работало как предполагается результат cin>>a должен быть либо нулевым, либо не нулевым. А он по определению ссылка на сам cin. То есть нулевым результат быть не может. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 02:32 |
|
||
|
Проблема считывания информации из входного потока (cin)
|
|||
|---|---|---|---|
|
#18+
White OwlЧтобы if(cin >> a) работало как предполагается результат cin>>a должен быть либо нулевым, либо не нулевым. А он по определению ссылка на сам cin. То есть нулевым результат быть не может. Нет. Чтобы if(cin >> a) работало как предполагается результат cin>>a должен приводится к булевому значению (а не обязательно им являться). Это обеспечивается оператором преобразования типа operator void*. Т.е. когда контекст булевый, то поток неявно преобразуется в void*, потому что доступно такое преобразование и потому что указатели в булевом контексте рассматриваются как булевые значения. Преобразование это производится только для наружного (последнего) оператора >> в выражении, поскольку только он находится в булевом контексте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 02:56 |
|
||
|
Проблема считывания информации из входного потока (cin)
|
|||
|---|---|---|---|
|
#18+
White Owlif сработает если и a и успешно считались.А если не успешно? Если обломались на а, то что? А если на b то что? [/quote] По моему в отквоченном я четко написал что произойдет. Если а не считано то b тоже не будет считано, т.к. после ошибки все последующие операции дают ошибку тоже, пока состояние ошибки не будет очищено. Соответственно выражение из двух >> даст true только если оба значения будут считаны без ошибок, но вызов >> произойдет в любом случае дважды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 03:02 |
|
||
|
Проблема считывания информации из входного потока (cin)
|
|||
|---|---|---|---|
|
#18+
По поводу того, какой контейнер следовало\не следовало использовать: я просто последовательно выполняю все упражнения в книге. Согласно текущему заданию нужно было использовать именно вектор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 08:21 |
|
||
|
Проблема считывания информации из входного потока (cin)
|
|||
|---|---|---|---|
|
#18+
White OwlAnatoly MoskovskyВо-вторых, ссылка на поток в булевом контексте (if, while, etc) неявно преобразуется в булево значение, показывающее успешно ли выполнена последняя операция над потоком.ээээ.... А это где сказано? И как это сочетается с запретом на возврат значений разных типов из функций с одинаковыми параметрами? Это сказано в любой книге, обучающей программированию в C/C++. В частности, это сказано в K&R. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 08:32 |
|
||
|
Проблема считывания информации из входного потока (cin)
|
|||
|---|---|---|---|
|
#18+
Compositum, Вопрос решён. Т.е. не было вызова cin.clear() после завершения первой серии ввода. Это я для "потомков" расшифровываю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 11:31 |
|
||
|
Проблема считывания информации из входного потока (cin)
|
|||
|---|---|---|---|
|
#18+
MasterZivCompositum, Вопрос решён. Т.е. не было вызова cin.clear() после завершения первой серии ввода. Это я для "потомков" расшифровываю. Не совсем так. Я добавил не одну, а три строки кода: Код: plaintext 1. 2. 3. Если разместить только первую, то программа по прежнему будет завершаться не входя в цикл while. Подозреваю - это происходит потому, что символ стаётся несчитанным, а после вызова Код: plaintext 1. происходит очередная попытка прочитать его. Поэтому я создал дополнительную переменную, в которую и считываю лишний символ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 12:12 |
|
||
|
Проблема считывания информации из входного потока (cin)
|
|||
|---|---|---|---|
|
#18+
Compositum, Решение проблемы: http://support.microsoft.com/kb/132422 Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 14:34 |
|
||
|
Проблема считывания информации из входного потока (cin)
|
|||
|---|---|---|---|
|
#18+
UsmanCompositum, Решение проблемы: http://support.microsoft.com/kb/132422 Код: plaintext 1. 2. 3. 4. 5. 6. 7. Чето там под древние компиляторы. Автор, у тебя какая версия компилятора? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 14:42 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38255946&tid=2020223]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
74ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 197ms |

| 0 / 0 |
