c программа, использующая инструкцию переключения некорректно работает - PullRequest
0 голосов
/ 04 февраля 2019

Я пытался написать эту программу, и она просто не выполняет то, что предполагалось, и я искал решения в Интернете, но я не могу понять, что не так, вы можете мне помочь?(Программа написана на португальском языке, потому что я делал это на своем языке, но она вполне понятна.

Упражнение таково: Напишите программу, которая позволяет вам из определенного числа часов указывать, какие минуты,секунд или даже десятых долей секунды, которые это количество часов содержит с помощью переключателя.

#include <stdio.h>
#include <stdlib.h>

int main()
{
 int h,m,s,ds;

printf("Introduza o nr de horas:\n");
scanf( "%d" , &h);

m = h*60;
s = h*60*60;
ds = h*60*60*10;

scanf( "%d%d%d" , &m, &s, &ds);

switch (h)
{
case 'a' : printf(" Tem: %d minutos" , m);
case 'b' : printf(" Tem: %d segundos" , s);
case 'c' : printf(" Tem: %d decimos de segundo" , ds);
default : printf("Medida incorreta");
}

}

Ответы [ 3 ]

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

В приведенном примере вы сначала вычисляете значения для m, s и ds из значения h, а затем присваиваете (перезаписываете) новые значения в функции scanf ().

Second- обратите внимание, что вы используете символьные литералы в операторах case, то есть 'a', 'b', 'c', вместо целого числа, то есть 1, 2, 3, несмотря на то, что переменная h хранит целое число.

Прежде всего, неплохо бы решить - какие значения должны быть в m, s и ds переменных - рассчитываться по h или вводиться пользователем.

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

Вам нужно больше понимать операторы switch-case.
Операторы switch-case не выполняют блок кода после оператора case.Он просто переходит к правильному оператору.

Switch-Case Statement

После запуска блока кода после оператора case он просто запускает приведенный ниже код - игнорируя любой другой случайзаявления.

Так что, если вы хотите остановить до следующего оператора case, вы должны использовать break , который будет прерывать оператор switch.(Выйдите из оператора switch)

В результате ваш код будет выглядеть следующим образом.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int h,m,s,ds;

    printf("Introduza o nr de horas:\n");
    scanf( "%d" , &h);

    m = h*60;
    s = h*60*60;
    ds = h*60*60*10;

    scanf( "%d%d%d" , &m, &s, &ds);

    switch (h)
    {
    case 'a' : 
        {
            printf(" Tem: %d minutos" , m); 
            break;
        }
    case 'b' :
        { 
            printf(" Tem: %d segundos" , s);
            break;
        }
    case 'c' : 
        {
            printf(" Tem: %d decimos de segundo" , ds);
            break;
        }
    default : 
        {
            printf("Medida incorreta");
            break;
        }
    }

}

Поскольку я думал, что вы изучали операторы switch-case, я не буду комментировать возвращаемое значение scanf.

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

Я не знаю, какой вывод вы получаете и чего ожидаете в выводе, но, глядя на ваш код, после каждого case

, например, появляется оператор

case 'a' : printf(" Tem: %d minutos" , m);
           break;

Что делает оператор break, который останавливает выполнение других дел

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...