| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Работа с файлами |
| Автор: Uter123 2.11.2015, 20:58 | ||
| Написать программу которая считывает текстовый файл , и вывести на экран только цитаты, то есть предложения, помещенные в ковычки. Проверьте не пойму почему зацикливается.
|
| Автор: feodorv 2.11.2015, 21:37 | ||
| Весь код не смотрел. Но сходу заметно такое: Почему +2??? Корректно это записывается так:
|
| Автор: rudolfninja 2.11.2015, 21:39 | ||||
Подозреваю, что у вас x[i] никогда не будет равно нулевому символу, потому что в i у вас храниться индекс ковычек. Во-вторых, у вас может быть выход за пределы массива в случае, когда строка заканчивается ковычкой.
Вот именно из-за этого и получится так. Предлагаю вам такой вариант:
|
| Автор: Uter123 2.11.2015, 21:41 |
| там j=b+1; это попытка исправить зацикливание. |
| Автор: feodorv 2.11.2015, 21:51 |
Тоже не верно. Зачем +1??? Как насчет ??? |
| Автор: rudolfninja 2.11.2015, 21:53 |
Как я понимаю, чтоб избежать ненужные итерации. В b хранится индекс ковычек, поэтому есть смысл двигаться от них, а не от следующего символа |
| Автор: Uter123 2.11.2015, 22:00 |
| Это чтобы когда нашли одно вхождение ковычек, можно было двигаться дальше чтобы найти следующее вхождение ковычек. |
| Автор: feodorv 2.11.2015, 22:11 | ||||
Это понятно. Но зачем здесь лишнее "+1"? Если бы Вы оформили код так:
|
| Автор: math64 3.11.2015, 08:40 |
Результат [j] != '\0' будет игнорироваться. Нужно x[j] != '\0' && j <= strlen(x) - хотя вторая проверка лишняя. |
| Автор: xvr 3.11.2015, 14:26 | ||
Как то у вас всё сложно и запутанно. Задача решается гораздо проще (привожу только внутренний цикл и оставляю помесь ostream/FILE как у вас было):
|
| Автор: feodorv 3.11.2015, 14:39 |
Кстати, и правильнее, так как находятся цитаты, расположенные на нескольких строчках. |
| Автор: Uter123 3.11.2015, 21:03 |
| Нам препод не разрешает использовать bool. Говорит чтобы мы его обходили стороной. |
| Автор: feodorv 3.11.2015, 21:27 | ||
Ну так обходите:
|
| Автор: Uter123 4.11.2015, 17:39 |
| А что означает эта строка : in_quote=!in_quote; |
| Автор: feodorv 4.11.2015, 20:54 | ||
Что-то вроде:
То есть если значение переменной in_quote ненулевое, то делаем его нулём; если же значение переменной in_quote нулевое, то делаем его ненулевым. Ненулевое значение переменной in_quote сигнализирует о том, что мы находимся внутри цитаты (и, соответственно, нужен вывод этой цитаты на экран); нулевое значение переменной in_quote говорит о том, что цитата ещё не началась, нужно ждать символа ". |
| Автор: math64 5.11.2015, 08:51 | ||||
А можно так (у препода не будет повода сказать, что in_qoute - имитация bool):
|