переключение оператора регистрации по умолчанию при вводе триггеров ввода - PullRequest
0 голосов
/ 27 февраля 2019
Переключатель

работает не совсем корректно, не уверен, почему, спасибо, не обращайте внимания на возможную неправильную математику, я пойму это позже, или вы тоже можете это исправить: P он просто пропускает к выражению по умолчанию, если я ставлю c или C, первые два ввода кажутсяработать нормально

#include <stdio.h>
#include <conio.h>
#include <math.h>

int main()
{
    int decider;
    double radius, height, circumference, surfaceArea, volume;
    const double PI = 3.14159265;

    printf("please enter radius in cm:");
    scanf("%lf", &radius);
    printf("please enter height in cm:");
    scanf("%lf", &height);
    printf("C. Calculate and display the circumference of the base of the cone\n"
           "S. Calculate and display the surface area of the cone\n"
           "V. Calculate and display the volume of the cone\n");
    scanf("%d", &decider);
    switch(decider)
    {
        case 'c':
        case 'C':
            circumference = (2.0f*PI)*radius;
            printf("%lf cm", circumference);
            break;
        case 's':
        case 'S':
            surfaceArea = PI * (pow(radius, 2)) + (PI * radius) * (sqrt((pow(height, 2)) + (pow(radius, 2))));
            printf("%lf cm sqaured", surfaceArea);
            break;
        case 'v':
        case 'V':
            volume = PI * (pow(radius, 2)) * (height/3.0f);
            printf("%lf cm cubed", volume);
            break;
        default:
            printf("An invalid option was selected!");
    }

    getch();
    return 0;
}

1 Ответ

0 голосов
/ 27 февраля 2019

Переменная decider имеет тип int, и вы используете спецификатор формата %d для чтения значения, для которого ожидается ввод десятичного целого числа.Поэтому, если вы не введете число, являющееся кодом ASCII для одной из заданных букв, вы всегда будете использовать значение по умолчанию.

Вы ищете символ, поэтому наберите decider a * 1007.* вместо этого используйте %c, чтобы прочитать его:

char decider;
...
scanf(" %c", &decider);

Также обратите внимание на пробел перед %c.Пробел будет поглощать любые пробельные символы, в том числе символ новой строки, заканчивающий последнюю строку текста.Это необходимо для %c, потому что, в отличие от других спецификаторов формата, %c будет читать и сохранять символ пробела.

...