从用户那里获取输入,并想要打印出他输入的信息。
我试图退出汽车类型,但是黑匣子不起作用,因此,速度给了我两个结果。.知道吗?
#include <stdio.h>
int speed(int distance, int time);
void message(float speed);
int main ()
{
char answer,name;
int distance , time ,speed1;
do {
speed1=speed(distance , time);
message(speed1);
int speed;
printf("\nContinue calculating speed? [Y/N] : ");
scanf(" %c",&answer);
}while(answer=='y' || answer =='Y');
}
int speed(int distance, int time)
{
int speed;
char name;
printf("Enter car type :");
scanf("%s",&name);
printf("Enter distance in kilometers : ");
scanf(" %d",&distance);
printf("Enter time in hour: ");
scanf(" %d",&time);
speed = distance / time;
return speed;
}
void message(float speed)
{
if (speed < 60 && speed >0)
{
printf("Speed: %.2f\n",speed);
printf("Too slow!");
}
else if (speed <90 && speed >61)
{
printf("Speed: %.2f\n",speed);
printf("Just cruising...");
}
else if ( speed <120 || speed >91)
{
printf("Speed: %.2f\n",speed);
printf("Good speed.");
}
else
printf("Speed: %.2f\n",speed);
printf("\nDanger alert!");
}
期望的结果是:
Enter car type: Alfa
Enter distance in kilometers: 300
Enter time in hours: 3
Car type: Alfa
Speed : 300.00
Good speed
但这给了我
Enter car type: Alfa
Enter distance in kilometers: 300
Enter time in hours: 3
Car type: Alfa
Speed : 300.00
Good speed
Danger alert!
答案 0 :(得分:1)
在这里
else if (speed < 120 || speed >91)
应该是
else if (speed < 120 && speed >91)
否则,它总是正确的。但是导致您的消息打印不正确的原因是这里缺少括号:
else
printf("Speed: %.2f\n", speed);
printf("\nDanger alert!");
这样,printf("\nDanger alert!");
将始终打印,因为它与if
块无关。将{}
放在两个printf
调用周围,就像处理上面的if
块一样。另外,name
必须是char
的数组,而不仅仅是一个char
:
char name[20];
然后您可以更改scanf
调用,以确保在用户输入过多内容时不会破坏内存:
scanf("%19s", &name);
此外,int speed(int distance, int time)
不需要这些参数。当您继续传递它们并在内部对其进行初始化时,它们尚未初始化。相反,它们可以是函数中的局部变量:
int speed()
{
int distance;
int time;
...
}
然后您可以从distance
中删除speed
,name
以及main
,以摆脱各种有关未使用/未初始化变量的编译器警告。>