花算子 2021-01-20 17:13 采纳率: 100%
浏览 43
已采纳

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

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条回答 默认 最新

  • q757044068 2021-01-21 10:07
    关注

    你加个断点运行下 看下第一次price的值就行了

     

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器