weixin_40114354
花算子
2021-01-20 17:13

while循环两次执行为什么一次有返回值一次没人返回值?

  • c语言

C语言的初级问题

第一个函数要求用户输入一个1~5的数字,打印数字对应的文字并返回用户所选的数字。将数字传入第二个函数,第二个函数打印该数字对应的金额。

第一个函数中有一个while()循环来实现不断的录入。但出现了一个bug:第一次输入时程序并不打印金额,第二次输入时才打印金额。

 

 

 

头文件:

#ifndef HOTEL_H_INCLUDED
#define HOTEL_H_INCLUDED

#define HOTEL1 872
#define HOTEL2 1838
#define HOTEL3 789
#define HOTEL4 1658
#define DISCOUNT 0.95

/*
    声名以下函数
*/

//显示酒店名称,提示用户选择,返回用户的选择
int Choice(void);

//接收用户选择的酒店序号输出酒店的单价
double Price(int);

 

主函数文件

 

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

/*
    1: 显示酒店名称和序号
    2:用户选择要入住的酒店序号并返回
    3:用户选择要入住的天数
    4:显示最终价格
*/

int main()
{
    int choice;//用户选择的酒店序号
    int price;//返回所选酒店的单价

    printf("欢迎进入酒店入住系统\n");

    while((choice = Choice()) != 5)
    {
        choice = Choice();
        price = Price(choice);

    }

    return 0;
}

 

实现函数的文件:

 

#include <stdio.h>
#include "hotel2.h"

//实现头文件中声名的函数

int Choice(void)//显示酒店名称,提示用户选择,返回用户的选择
{
    int i;//循环变量
    int choice;//用户的选择
    int value;
    char hotelNames[4][50] = {
    "贝罗酒店","香榭丽舍广场酒店","阿斯图里亚斯特拉奥佩拉酒店","斯克里布索菲特酒店"
    };//酒店名称

    for(i = 0; i< 4; i++)//打印酒店名称
    {
        printf("%d:\t%s\n", i + 1, hotelNames[i]);
    }

    printf("5:\t退出\n\n");

    printf("请选择入住的酒店:");

    while(value = (scanf ("%d", &choice)) != 1 || choice < 1 || choice > 5)//当输入不合法时重新输入
    {
        if(value != 1)
        {
            scanf("%*s");//清空缓存
        }

        printf("请输入:1-5 之间的整数\n");
    }

    if(choice != 5)
    {
        printf("您选择的酒店是:%d\t%s\n", choice, hotelNames[choice - 1]);
    }
    if(choice == 5)
    {
        printf("感谢使用\n");
    }

    return choice;

}



//接收用户选择的酒店序号输出酒店的单价
double Price(int choice)
{
    double price;

    switch(choice)
    {
    case 1:
        price = HOTEL1;
        break;
    case 2:
        price = HOTEL2;
        break;
    case 3:
        price = HOTEL3;
        break;
    case 4:
        price = HOTEL4;
        break;
    }

    printf("所选酒店的单价是:%.2lf\n\n", price);

    return price;
}

 

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

4条回答