我一直在尝试编写此程序,但它并未按预期的方式运行,并且我一直在网上寻找解决方案,但我不知道出了什么问题,您能帮帮我吗? (该程序是葡萄牙语的,因为我用我的语言来做,但这是可以理解的。
练习是: 编写一个程序,使您可以从 确定的小时数,分钟,秒, 甚至十分之一秒,这个小时数 包含使用开关。
#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");
}
}
答案 0 :(得分:1)
我不知道您得到的输出是什么,以及在输出中期望什么,但是通过查看您的代码,每个break
之后都有case
语句
例如
case 'a' : printf(" Tem: %d minutos" , m);
break;
什么break语句会阻止其他情况执行
答案 1 :(得分:1)
您需要更多了解switch-case语句。
switch-case语句在case语句之后不执行代码块。它只是跳到正确的语句。
在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
的值计算s
,ds
和h
的值,然后在scanf()中分配(覆盖)新值
第二个-请注意,尽管变量h
存储,但您在case语句中使用char文字,即'a','b','c',而不是整数,即1,2,3整数。
首先,最好确定-值必须在m
,s
和ds
变量中-由h计算或由用户输入。