试图打印出用户输入的一些信息,但是没有用

时间:2019-09-04 07:23:22

标签: c function

从用户那里获取输入,并想要打印出他输入的信息。

我试图退出汽车类型,但是黑匣子不起作用,因此,速度给了我两个结果。.知道吗?

#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!

1 个答案:

答案 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中删除speedname以及main,以摆脱各种有关未使用/未初始化变量的编译器警告。