Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
madi
0 / 0 / 0
Регистрация: 28.04.2014
Сообщений: 86
1

Как считать одним scanf сразу и символ и число?

08.10.2016, 01:03. Просмотров 1425. Ответов 4
Метки нет (Все метки)

Как мне заставить scanf принять одно число (типо float), и символ(char).
C
1
scanf("%f %c",numerial,FirstChoiceTemp);
Число я отправляю в функцию, причем в какую функцию зависит от символа.
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
 
 
void Kelvin(float degreeKelvin) {
    char SecondChoiceTemp = 'o';
    float farenheit = 0;
    float celsii = 0;
    
    
    printf("Enter the new unit type (F, C, or K): \n" );
    scanf("%c",&SecondChoiceTemp);
    if (SecondChoiceTemp == 'K') {
        printf("%f is %f", degreeKelvin,degreeKelvin);
    }
    else if (SecondChoiceTemp == 'F') {
        farenheit = (degreeKelvin - 273.15) * 1.8 + 32;
        printf("%f is %f", degreeKelvin,farenheit);
    }
    else if (SecondChoiceTemp == 'C') {
        celsii = degreeKelvin - 273.15;
        printf("%f is %f", degreeKelvin,celsii);
    }
    
} 
void Celsii(float degreeCelsii) {
    char SecondChoiceTemp = 'o';
    float farenheit = 0;
    float kelvin = 0;
    
    printf("Enter the new unit type (F, C, or K): \n" );
    scanf("%c",&SecondChoiceTemp);
    if (SecondChoiceTemp == 'C') {
        printf("%f is %f", degreeCelsii,degreeCelsii);
    }
    else if (SecondChoiceTemp == 'F') {
        farenheit = (degreeCelsii * 1.8) + 32;
        printf("%f is %f", degreeCelsii,farenheit);
    }
    else if (SecondChoiceTemp == 'K') {
        kelvin = degreeCelsii + 273.15;
        printf("%f is %f", degreeCelsii,kelvin);
    }
    
} 
 
void Farenheit(float degreeFarenheit) {
    
    char SecondChoiceTemp = 'o';
    float celsii = 0;
    float kelvin = 0;
    
    printf("Enter the new unit type (F, C, or K): \n" );
    scanf("%c",&SecondChoiceTemp);
    if (SecondChoiceTemp == 'F') {
        printf("%f is %f", degreeFarenheit,degreeFarenheit);
    }
    else if (SecondChoiceTemp == 'C') {
        celsii = (degreeFarenheit - 32) * 1.8;
        printf("%f is %f", degreeFarenheit,celsii);
    }
    else if (SecondChoiceTemp == 'K') {
        kelvin = (degreeFarenheit-32) * 1.8 + 273.15;
        printf("%f is %f", degreeFarenheit,kelvin);
    }
    
}
 
void temperature() {
    float numerial = 0;
    char FirstChoiceTemp = 'o';
    
    printf("Enter the temperature followed by its suffix (F, C, or K): ");
    scanf("%f  %c",&numerial,&FirstChoiceTemp);
    
    if( (FirstChoiceTemp == 'K') || (FirstChoiceTemp == 'k') ){
        Kelvin(numerial);
    }
    else if( (FirstChoiceTemp == 'C') || (FirstChoiceTemp == 'c') ){
        Celsii(numerial);
    }
    else if( (FirstChoiceTemp == 'F') || (FirstChoiceTemp == 'f') ){
        Farenheit(numerial);
    }
    
}
 
 
int main(void) {
    char Degree = 'o';
    
    printf("T or t for temperature");
    printf("D or d for temperature");
    scanf("%c", &Degree);
    if( (Degree == 'T') || (Degree == 't') ){
    temperature();
    }
        
    return 0;
}
C двумя int получалось
C
1
scanf("%d i +%d",&FirstComplexImag,&FirstComplexReal);
а здесь никак... Пробовал эксперементировать типо + поставить или еще что, не получается
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2016, 01:03
Ответы с готовыми решениями:

Как считать числовой код через scanf?
Допустим у нас есть числовой код 17-23-10 что нужно записать в scanf?

Scanf считывает enter, как символ конца строки. Как исправить?
Добрый день. Пишу меню для программы в Visual Studio 2015, возникает проблема: scanf запоминает...

Как заставить scanf() игнорировать символ конца строки?
При вызове функции scanf() автоматически происходит запись символа '\n' на стандартное ус-во. Как...

Scanf рассматривает нажатие клавиши enter как дополнительный символ, который не равен 'y'
Вот маленькая, но настойчивая программка, которая не успокаивается, пока не скажите &quot;да&quot; (y): ...

Как из edit считать символ, а не число?
Задание: Мастям игральных карт условно присвоены следующие буквы: масти «пики» – «п», масти...

4
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
5199 / 2584 / 715
Регистрация: 18.10.2014
Сообщений: 4,503
08.10.2016, 01:14 2
Лучший ответ Сообщение было отмечено madi как решение

Решение

Цитата Сообщение от madi Посмотреть сообщение
а здесь никак...
В чем заключается "никак"?

Здесь

C
1
scanf("%f  %c",&numerial,&FirstChoiceTemp);
все правильно написано (пробела, правда, хватило бы и одного).

Другое дело, что после такого scanf символ перевода строки останется сидеть в буфере, в результате чего последующий

C
1
scanf("%c",&SecondChoiceTemp);
будет "пролетать". Надо не забывать ставить пробел в строке формата перед %c в таких случаях

C
1
scanf(" %c",&SecondChoiceTemp);
P.S. Ну и за использование float в качестве "рабочего" типа стоило бы наругать как следует. double, double и только double.
2
madi
0 / 0 / 0
Регистрация: 28.04.2014
Сообщений: 86
08.10.2016, 01:43  [ТС] 3
Спасибо! Заработало!) А почему и float не использовать бы?
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
5199 / 2584 / 715
Регистрация: 18.10.2014
Сообщений: 4,503
08.10.2016, 02:05 4
Цитата Сообщение от madi Посмотреть сообщение
А почему и float не использовать бы?
Испокон веков в С умолчательным целочиселенным типом является тип int, а умолчательным плавающим типом является тип double. Например, константа 1 имет тип int, а константа 1. имет тип double. Это - "натуральные" по своему размеру типы. Типы меньшего размера предназначены в первую очередь для специальных случаев и применений (например, для экономии памяти в массовых структурах данных), и работа с ними требует дополнительных телодвижений.

Ваш случай ничем "специальным" не отличается.
2
madi
0 / 0 / 0
Регистрация: 28.04.2014
Сообщений: 86
08.10.2016, 06:08  [ТС] 5
Понял))) Прочитал статейку про диапазон принимаемых значений и еще кое-что полезного узнал

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
08.10.2016, 06:08
StackOverflow
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2016, 06:08

Можно ли через scanf считать число, записанное в двоичной системе счисления
Добрый день уважаемые обитатели. Вопрос заключается в следующем: Можно ли через scanf считать...

Считать число из дока сразу в двоичной системе
Есть способ считать из файла цифру 199 сразу в массив(без деления), где каждый элемент массива 1...

Как вывести символ по адресу scanf
Почему исключительная ситуация? #include &lt;stdio.h&gt; int main(){ char* p; printf(&quot;Vvedite...


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

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

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