Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 18.07.2017
Сообщений: 2
1

Разный вывод (printf) табуляции (\t) ветвлений (if-if-if-else) и (if-elseif-elseif-else)

18.07.2017, 20:54. Показов 1176. Ответов 4

Почему результатом выполнения нижеследующего кода при вводе, например: "qwe[кнопка_tab]qwe" консоль (linux) отображает слитно: "qwe\tqwe"? Название: 1.png
Просмотров: 39

Размер: 1.6 Кб
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
int main(){
 
    int ch = 0;
 
    while ((ch=getchar())!=EOF){
 
        if (ch == '\t') printf("\\t");
        else if (ch == '\b') printf("\\b");
        else if (ch == '\\') printf("");
        else putchar(ch);
    }
}
А результатом нижеследующего получается раздельный вывод в консоли "qwe\t qwe" - Название: 2.png
Просмотров: 40

Размер: 1.7 Кб
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
int main(){
 
    int ch = 0;
 
    while ((ch=getchar())!=EOF){
 
        if (ch == '\t') printf("\\t");
        if (ch == '\b') printf("\\b");
        if (ch == '\\') printf("");
        else putchar(ch); printf("\a");
    }
}
P.S.: Только что начал обучение, читаю книгу "Язык программирования Си" Брайан Керниган, Деннис Ритчи
Там задание: Упражнение 1.10. Напишите программу, копирующую вводимые символы в выходной поток с заменой
символа табуляции на \t, символа забоя на \b и каждой обратной наклонной черты на \\. Это сделает
видимыми все символы табуляции и забоя.

Объясните пожалуйста на пальцах что в какой строчке "идет не так".
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.07.2017, 20:54
Ответы с готовыми решениями:

If/elseif/else
Здравствуйте, я только начал изучать php. У меня вопрос почему на выходе у кода &lt;?php $age =...

If.Then.Else.Elseif
Здравствуйте, я подумал по-практироватся в Visual Basic, но у меня появилась маленькая проблемка....

Есть ли elseif
Я чего-то не понял. В С++ нет функции elseif ? А если нет, что ее может заменить?

не работает if elseif
Добрый день. Проблема(может быть и детская))), но никак не могу понять ПОЧЕМУ ?? Суть состоит в...

4
С чаем беда...
Эксперт CЭксперт С++
9259 / 4759 / 1288
Регистрация: 18.10.2014
Сообщений: 10,827
18.07.2017, 22:07 2
Ну вот здесь

Цитата Сообщение от progforgood Посмотреть сообщение
C
1
2
if (ch == '\\') printf("");
else putchar(ch);
вы делаете вывод табуляции через putchar(ch). Из-за нее и возникает промежуток.

И зачем у вас printf("\a"); делается после каждого символа?
0
866 / 527 / 174
Регистрация: 30.07.2015
Сообщений: 1,727
19.07.2017, 01:18 3
TheCalligrapher, да это в книжке предлагают системный аларм повызывать попробовать))
0
0 / 0 / 0
Регистрация: 18.07.2017
Сообщений: 2
19.07.2017, 07:10  [ТС] 4
Почему тогда код:
C
1
2
3
4
5
    while ((ch=getchar())!=EOF){
 
        if (ch == '\t') printf("\\t");
        else putchar(ch);
    }
выводит Название: 1.png
Просмотров: 26

Размер: 1.7 Кб

а, в свою очередь код:
C
1
2
3
4
5
6
    while ((ch=getchar())!=EOF){
 
        if (ch == '\t') printf("\\t");
        if (ch == 'о') printf("оооооо");
        else putchar(ch);
    }
выводит Название: 2.png
Просмотров: 26

Размер: 1.6 Кб??
Добавляется (насколько я понимаю) ничего не значащая строка (if (ch == 'о') printf("оооооо"), а вывод меняется.. это в компиляторе проблема?
Почему тогда не одинаковый размер табуляции? Почему записывается \t "слева в табуляции", если можно так сказать?
0
С чаем беда...
Эксперт CЭксперт С++
9259 / 4759 / 1288
Регистрация: 18.10.2014
Сообщений: 10,827
19.07.2017, 07:24 5
Цитата Сообщение от progforgood Посмотреть сообщение
Почему тогда код:
Не понимаю вопроса. Причина та же самая, что в прошлый раз. Первый код не делает putchar(ch) для символа табуляции, а второй - делает.

Цитата Сообщение от progforgood Посмотреть сообщение
Добавляется (насколько я понимаю) ничего не значащая строка (if (ch == 'о') printf("оооооо"), а вывод меняется..
Какая же она "ничего не значащая"??? Вы сделали сравнение с 'o'. Символ табуляции не равен 'o', поэтому выполняется ветка else, т.е. делается putchar(ch) и табуляция появляется на экране.

Цитата Сообщение от progforgood Посмотреть сообщение
это в компиляторе проблема?
Нет, тут нет никакой проблемы в компиляторе.

Цитата Сообщение от progforgood Посмотреть сообщение
Почему тогда не одинаковый размер табуляции?
Это где это он "не одинаковый"? Во втором выводе второе qwe аккуратно выровнено по вертикали. То есть размер табуляции строго одинаковый. О чем вы ведете речь?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.07.2017, 07:24

elseif или else if?
какой на ваш взгляд условный оператор лучше?:)

условие elseif
&lt;a href=&quot;?x=1&quot;&gt;Продукты&lt;/a&gt; условие if ($x==1) { include(&quot;product.php&quot;); } файлик...

не работает if, elseif
Добрый день. Проблема(может быть и детская))), но никак не могу понять ПОЧЕМУ ?? Суть состоит в...

If/elseif/else в переменную
Есть переменная с условием $var = function_name($var2, ($_SESSION == 'ru' ? '****' : '####'),...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.