gpt4 book ai didi

c - 需要帮助使我的代码高效

转载 作者:行者123 更新时间:2023-11-30 19:51:18 25 4
gpt4 key购买 nike

所以我刚刚开始学习结构,我最近的问题要求我检查用户输入的屏幕时间,唯一有效的范围是下午 2 点、下午 5 点、晚上 8 点和晚上 11 点。我为它编写了一个很长的代码并按预期工作,但我认为它效率不高?我尝试为有效的屏幕时间创建一个数组,并在大小为 4 的数组中输入所有 4 个值,并在用户输入选择时创建一个循环来检查数组内的每个值,但当用户输入错误的选择时,它会显示 4 条错误消息因为它检查数组内的所有 4 个值,所以它是错误的。无论如何,这是我的代码:

void main(){

typedef struct{

char movieName[20];
int screenTime;
float price;
int seatNum;
} MovieTicket;

MovieTicket ticket;

//int validTime[4] = {2, 5, 8, 11};

do{
printf("Enter your screen time: ");
scanf("%d", &ticket.screenTime);

if(ticket.screenTime != 2 && ticket.screenTime != 5 && ticket.screenTime != 8 && ticket.screenTime != 11){
printf("Invalid Screen Time! Enter again please!\n");
}

} while(ticket.screenTime != 2 && ticket.screenTime != 5 && ticket.screenTime != 8 && ticket.screenTime != 11);

system("pause");
}

感谢您的宝贵时间,我只是一个初学者,所以请耐心等待:(

最佳答案

像这样使用魔数(Magic Number)是相当难以维护的(添加新的允许时间并不干净,您必须编辑条件等),您的数组版本更好。本答案的其余部分重点是让该解决方案按照您想要的方式工作:

它非常高效(可以通过使用 std::setstd::unordered_set 提高效率,但对于如此少量的允许值,它是可以忽略不计),这不是问题。您当前的版本与使用数组的版本一样快,因为您仍然比较相同数量的数字。

如果您的问题是它打印错误 4 次,则保留一个 bool 标志来指示用户输入了有效值,并在循环后检查它:

const unsigned int VALID_TIMES_SIZE = 4;
bool validTime = false;
for (unsigned int i = 0; i < VALID_TIMES_SIZE; ++i)
{
if (ticket.screenTime == validTimes[i])
{
validTime = true;
break;
}
}
if (!validTime)
{
printf("Invalid Screen Time! Enter again please!\n");
// Redo the loop using continue, for example
}

关于c - 需要帮助使我的代码高效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46874433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com