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;
}