Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Rookie Hose
4 / 4 / 2
Регистрация: 25.08.2014
Сообщений: 36
#1

Вывод переменных типа char: правильно выводится только первый символ - C++

25.08.2014, 17:03. Просмотров 1799. Ответов 22
Метки нет (Все метки)

Всем привет. Извиняюсь, если вопрос слишком уж нелепый, но не могу понять в чем суть...

C++
1
2
3
4
5
6
7
8
9
10
#include <cstdio>
 
int main()
{
    char a,b,c;
    printf("Enter smth: ");
    scanf("%c,%c,%c", &a, &b, &c);
    printf("%c,%c,%c", a, b, c);
    return 0;
}
Почему-то выводит printf нормально только первый символ, два других - совершенно другие символы...в том числе и в случае, когда для всех трех переменных вводишь одинаковые буквы...в чем тут загвоздка?
Скриншот для наглядности.
0
Миниатюры
Вывод переменных типа char: правильно выводится только первый символ  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2014, 17:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывод переменных типа char: правильно выводится только первый символ (C++):

Выводится только первый символ строки - C++
Имеется код: #include &lt;iostream&gt; using namespace std; int main() { string k, s = &quot;4,65&quot;; int i; for (i = 0, k...

При сложении переменных типа char выводится код символа - C++
Почему когда говоришь вывести символ &quot;а&quot; выводится &quot;А&quot; а когда просишь вывести &quot;а+b&quot; выводит значение 70 а не символ &quot;F&quot; с чем это...

Считывается только первый символ char - C++
Всем привет! При введении данных с клавиатуры записывается только первый символ, а дальше программа пропускает дальнейшие действия....

Выводится в файл только первый символ строки, остальные пустые - C++
Есть код обработчика нажатия.По идее,ставя точки останова и проверяя значения все значения получаются правильно.Но при выводе в файл эти 5...

Вывод списка объектов. Выводится только ссылка на первый элемент - C++
Ребят, помогите вывести список из объектов класа &quot;cic&quot;. Пробовал через итераторы как в мейне, но оно выводит только ссылку на первый...

Создание и вывод односвязного списка (выводится только первый элемент) - C++
Надо создать список и вывести его, выводит только 1 и последний элемент, не понимаю почему, добавление вроде же правильное. #include...

22
КОП
361 / 280 / 86
Регистрация: 15.08.2010
Сообщений: 762
03.09.2014, 00:58 #16
Rookie Hose, действительно странно, такое вроде как через if спокойно решается. Как вариант, разделить числовую прямую на три условные зоны. получить номер зоны и его уже закинуть в switch. Хотя я тоже новичок в
этом деле, могу чушь спороть иногда.
что-то типа:
C++
1
switch (x < -5 ? 0 : x =< 5 ? 1 : 2)
писал сразу тут, могут быть синтаксические неточности.
1
Rookie Hose
4 / 4 / 2
Регистрация: 25.08.2014
Сообщений: 36
03.09.2014, 13:35  [ТС] #17
Спасибо за идеи, вот воплащение :

C++
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
#include <cstdio>
#include <cstdlib>
 
int main()
{
    double x, x2, y;
    int m, tmp1;
 
    printf("1. X input\n2. Y input\nPick 1 or 2\n");
    scanf("%d", &m);
    switch (m)
    {
        case 1:
                printf("Enter X: ");
                scanf("%lf", &x);
 
                x < -5 ? tmp1 = 1 : (x < 5 ? tmp1 = 2 : tmp1 = 3);
                switch (tmp1)
                    {
                        case 1: y = x; break;
                        case 2: y = x * x; break;
                        case 3: y =  0; break;
                        default: printf("Invalid input\n");
                    }
                printf("Y: %.3lf\n", y);
                break;
        case 2:
                printf("Enter X2: ");
                scanf("%lf", &x2);
 
                x2 < -5 ? tmp1 = 1 : (x2 < 5 ? tmp1 = 2 : tmp1 = 3);
                switch (tmp1)
                    {
                        case 1: y = x2; break;
                        case 2: y = x2 * x2 * x2; break;
                        case 3: y = -5; break;
                        default: printf("Invalid input\n");
                    }
                printf("Y: %.3lf\n", y);
                break;
        default: printf("Invalid input\n");
    }
    system("pause");
    return 0;
}
Читабелен ли такой код?
0
gru74ik
Модератор
Эксперт CЭксперт С++
4196 / 1844 / 198
Регистрация: 20.02.2013
Сообщений: 4,991
Записей в блоге: 22
03.09.2014, 13:47 #18
Цитата Сообщение от Rookie Hose Посмотреть сообщение
Просьба к модераторам - можно переименовать тему в "Наивные вопросы новичка"? Мне не хочется создавать кучу тем с простейшими (для более опытных пользователей) вопросами...
Это вряд ли. Потому как будет против правил форума (пункт 4.4):
На каждый вопрос создавайте по одной теме - это помогает избежать путаницы в ответах и облегчает поиск.
0
КОП
361 / 280 / 86
Регистрация: 15.08.2010
Сообщений: 762
03.09.2014, 13:49 #19
Цитата Сообщение от Rookie Hose Посмотреть сообщение
x < -5 ? tmp1 = 1 : (x < 5 ? tmp1 = 2 : tmp1 = 3);
зачем же столько присваиваний?
C++
1
tmp1 = x2 < -5 ? 1 : (x2 < 5 ? 2 : 3);
а еще проще без tmp1
C++
1
2
switch(x2 < -5 ? 1 : (x2 < 5 ? 2 : 3))
...
и на с++ привычнее все таки cout вместо printf, в остальном читабельность отличная.

PS: некоторым может не нравиться тренарный оператор ? : , т.к. иногда его становится сложно читать (а некоторым просто не нравится), но тут,как мне кажется, он уместен.
1
Rookie Hose
4 / 4 / 2
Регистрация: 25.08.2014
Сообщений: 36
03.09.2014, 14:05  [ТС] #20
КОП, насчет присваивания - да, согласен, учту на будущее. Так я написал, потосу что на первый взгляд показалось, что так проще понять.

а насчет tmp1 - с ней же читабельность и простота повышаются?
C++
1
switch(x2 < -5 ? 1 : (x2 < 5 ? 2 : 3))
на первый взгляд кажется тяжелой конструкцией.

Но это, наверное, на неопытный взгляд только...К тому же, с доп. переменными, выходит, больше вычисленный...Тоже буду стараться так писать. Спасибо
0
КОП
361 / 280 / 86
Регистрация: 15.08.2010
Сообщений: 762
03.09.2014, 14:22 #21
Цитата Сообщение от Rookie Hose Посмотреть сообщение
на первый взгляд кажется тяжелой конструкцией.
тут нет объективного мнения. Однако множество лишних переменных зачастую только путают (опять же мое субъективное мнение). Просто оставляйте комментарий в таких местах.
0
DrOffset
7376 / 4453 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
03.09.2014, 14:44 #22
Цитата Сообщение от Rookie Hose Посмотреть сообщение
на первый взгляд кажется тяжелой конструкцией.
Решение через swicth в любом случае нехорошее. Понятно, что задание требует и все дела. Но в реальности лучше так не писать. Т.е. хорошим решением этой задачи, в том числе с т.з. эффективности будет вот это:
C++
1
2
3
4
5
6
7
8
9
10
11
12
if(x < -5)
{
    y = x;
}
else if(x < 5)
{
    y = x * x;
}
else
{
    y = 0;
}
А switch - считай как разминку.
И да, если задачи, где наоборот, switch предпочтительнее. Это не зря, что в языке есть несколько вариантов задания условий.

Добавлено через 3 минуты
Цитата Сообщение от Rookie Hose Посмотреть сообщение
К тому же, с доп. переменными, выходит, больше вычисленный...
Это совершенно не факт. Зачастую даже наоборот. Там где нужна временная переменная, компилятор все равно ее создаст, даже если ты напишешь вообще все в одну строку. Подчеркну, я о том, что сама по себе запись в одну строку или с доп. переменной не говорит о том, что будет создано, а что нет. Есть ситуации, где переменную нельзя не создать, даже если явного создания в коде нет (исп. временная переменная). А если в чем-то не уверен - смотри ассемблер, он не врет.
1
Rookie Hose
4 / 4 / 2
Регистрация: 25.08.2014
Сообщений: 36
03.09.2014, 14:59  [ТС] #23
DrOffset, полностью согласен, через if я это сразу написал за разъяснения - спасибо, не подозревал об этом еще.
0
03.09.2014, 14:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.09.2014, 14:59
Привет! Вот еще темы с ответами:

Как преобразовать первый символ строки в переменную char? - C++
string str = &quot;hello&quot;; char ch; хочу чтобы в переменной &quot;ch&quot; лежал символ &quot;h&quot; Это в идеале, если возможно без дополнительных...

Суммирование 2-х переменных типа Char - C++
Снова такая проблема.... есть 2 переменные char x='1'; char y='2'; мне нужно получить переменную типа int z=12

сравение переменных типа char - C++
Доброго времени суток, у меня возникла проблема... Нужно ввести название товара, и что бы на экран вывелась информация об этом товаре ...

Перевод переменных типа int в char - C++
как перевести отрицательную цифру интежер в чар?


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

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

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