3 / 3 / 2
Регистрация: 15.05.2015
Сообщений: 93
|
|
1 | |
Керниган/Ритчи упражнение 1.2210.08.2017, 22:09. Показов 2521. Ответов 13
Метки нет (Все метки)
"Упражнение 1.22. Напишите программу, печатающую символы входного потока так, чтобы строки текста не
выходили правее n-й позиции. Это значит, что каждая строка, длина которой превышает n, должна печататься с переносом на следующие строки. Место переноса следует "искать" после последнего символа, отличного от символа-разделителя, расположенного левее n-й позиции. Позаботьтесь о том, чтобы ваша программа вела себя разумно в случае очень длинных строк, а также когда до n-й позиции не встречается ни одного символа пробела или табуляции." При выполнении программы ошибка такого рода на скриншоте
0
|
10.08.2017, 22:09 | |
Ответы с готовыми решениями:
13
Керниган/Ритчи упражнение 1.20 Керниган Ритчи Упражнение 2.2 Керниган, Ритчи, указатели и упражнение 5.3 Выделить преобразование температур в отдельную функцию. (Керниган и Ритчи: Упражнение 1.15) |
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
|
10.08.2017, 22:47 | 2 |
AlexeyChun, что за getline ? как это вообще скомпилировалось? в stdio нет такой функции, есть gets(). более того вы пытаетесь зачитать строку в int, а потом исользуете putchar(). какая то каша. Строки считываются в буффер.
0
|
3 / 3 / 2
Регистрация: 15.05.2015
Сообщений: 93
|
|
10.08.2017, 23:22 [ТС] | 3 |
точно) getchar() же поправил код, но в первой строке почему-то после любого i-го символа бросает на новую строку.
0
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
|
10.08.2017, 23:59 | 4 |
AlexeyChun, у вас проверка условия какое то странное, в одном вы сравниваете i в том же переменную с.
0
|
3 / 3 / 2
Регистрация: 15.05.2015
Сообщений: 93
|
|
11.08.2017, 00:22 [ТС] | 5 |
когда i > N по условиям задачи нужно оставить пробелы/табуляцию на той же строке, вот поэтому решил выделить в else проверку на пробел/табуляцию.
Вообщем в i сохраняется значение числа символов предыдущей строки до ввода новой для деления. Как понимаю нужн окак-то очистить буфер.
0
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
||||||
11.08.2017, 00:33 | 6 | |||||
0
|
3 / 3 / 2
Регистрация: 15.05.2015
Сообщений: 93
|
|
11.08.2017, 00:59 [ТС] | 7 |
1. у операций сравнения приоритет выше присваивания.
2. в конце строки может быть несколько символов-пробелов/табуляций.
0
|
3 / 3 / 2
Регистрация: 15.05.2015
Сообщений: 93
|
|
11.08.2017, 01:06 [ТС] | 8 |
Вот он разбивает длинные строки...первая строка явно короткая, потому что в i хранится значение длины предыдущей строки. Вопрос как его сбрасывать, это значение.
0
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
||||||
11.08.2017, 01:10 | 9 | |||||
AlexeyChun, 1. неудобно писать в блокноте) 2. Попробуй так, нет возможности скомпилировать
AlexeyChun, вы операцию ветвления видимо неправильно поняли. в структурe if..ifelse..else может выполняться только одна ветка, тогда как у вас, может одновременно выполняться две так как может выполняться первый if так как i < N, и одновременно выполняться другое условие else if, так как c может быть и пробелом и табуляцией.
0
|
3 / 3 / 2
Регистрация: 15.05.2015
Сообщений: 93
|
|
11.08.2017, 02:01 [ТС] | 10 |
По-моему это не так, да и компилятор подтверждает) если бы было так, то бы символ удваивался по putchar(c) в обоих ветвлениях, а этого не происходит
0
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
|
11.08.2017, 11:23 | 11 |
AlexeyChun, все я наконец то понял, про пробелы и табуляцию в задаче. Я сначала подумал, что пробелы и табуляцию надо проверять и до i < N и поэтому и сказал, что elseif не будет выполняться пока выполняется if.
0
|
738 / 543 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
|
|
11.08.2017, 11:43 | 12 |
0
|
3 / 3 / 2
Регистрация: 15.05.2015
Сообщений: 93
|
|
11.08.2017, 12:13 [ТС] | 13 |
С трудом понимаю что это.
Объясните что это - "трудности перевода" в книге или вполне себе задача.
0
|
738 / 543 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
|
|||||||||||
11.08.2017, 13:12 | 14 | ||||||||||
имеется ввиду чтобы слова переносились целиком а не разрывались если на N-ю позицию приходится середина слова, т.е. чтобы местом переноса был пробельный символ.
Допустим
Every breath you take Вывод должен быть: Every breath you take А у вас получится: Every brea th you tak e
1
|
11.08.2017, 13:12 | |
11.08.2017, 13:12 | |
Помогаю со студенческими работами здесь
14
Ритчи и Керниган Компилятор С(Керниган ,Ритчи) Указатели, Керниган и Ритчи 5.4 Керниган/ритчи задачи 1.18 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |