c程序使用开关指令工作不正常

时间:2019-02-04 11:47:27

标签: c

我一直在尝试编写此程序,但它并未按预期的方式运行,并且我一直在网上寻找解决方案,但我不知道出了什么问题,您能帮帮我吗? (该程序是葡萄牙语的,因为我用我的语言来做,但这是可以理解的。

练习是: 编写一个程序,使您可以从 确定的小时数,分钟,秒, 甚至十分之一秒,这个小时数 包含使用开关。

#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 :(得分:1)

我不知道您得到的输出是什么,以及在输出中期望什么,但是通过查看您的代码,每个break之后都有case语句

例如

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

什么break语句会阻止其他情况执行

答案 1 :(得分:1)

您需要更多了解switch-case语句。
switch-case语句在case语句之后不执行代码块。它只是跳到正确的语句。

Switch-Case Statement

在case语句之后运行代码块之后,它仅运行以下代码-忽略任何其他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的返回值。

答案 2 :(得分:0)

在提供的示例中,您首先从m的值计算sdsh的值,然后在scanf()中分配(覆盖)新值

第二个-请注意,尽管变量h存储,但您在case语句中使用char文字,即'a','b','c',而不是整数,即1,2,3整数。

首先,最好确定-值必须在msds变量中-由h计算或由用户输入。