- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要为我的第一学期 c 作业编写一个函数。如果有人可以帮助我,我已经写好了所有作业,我只需要验证用户输入。这是老师给我的...如果这还不够,我可以发布更多内容
double get_double(void)
必须使用函数来验证每项费用的输入和收入。它将不断提示用户输入数值,直到满足要求状况。值必须是数字且大于或等于0。如果输入任何字符在数字之前或之后,输入将被视为无效。
#include <stdio.h>
#include <conio.h>
double get_expenses(double* pSchool, double* pLiving, double* pTransp, double* pOther); /* function prototype */
double get_income(double* pEmploy, double* pOther); /* function prototype */
double display_report(double School, double Living, double Transp, double OtherExp, double Employ, double OtherInc); /* function prototype */
char get_char(char* pRecalculate); /* function prototype */
void clear_buffer(void); /* function prototype */
double get_double(void); /* function prototype */
main() {
double school, living, transp, otherExp;
double employ, otherInc;
char recalculate;
int counter = 1;
while (counter > 0){
printf("Student Budget Planner\n");
printf("~~~~~~~~~~~~~~~~~~~\n");
printf("Input Set: %d\n\n", counter);
get_expenses(&school, &living, &transp, &otherExp);
get_income(&employ, &otherInc);
display_report(school, living, transp, otherExp, employ, otherInc);
clear_buffer();
get_char(&recalculate);
if (recalculate == 'Y' || recalculate == 'y'){
counter = counter + 1;
} else {
counter = 0;
}
}
return 0;
}
double get_expenses(double* pSchool, double* pLiving, double* pTransp, double* pOther) {
*pSchool = *pLiving = *pTransp = *pOther = 0;
double tuition, textbooks, supplies, rent, utilities, phone, groceries;
double entertainment, transportation, car, insurance, gas, other;
printf("School Expenses:\n");
printf("~~~~~~~~~~~~~~\n");
printf("Tuition (per semester): ");
scanf("%lf", &tuition);
printf("\nTextbooks(per semester): ");
scanf("%lf", &textbooks);
printf("\nSupplies: ");
scanf("%lf", &supplies);
*pSchool = (tuition / 4) + (textbooks / 4) + supplies;
printf("\n\nLiving Expenses:\n");
printf("~~~~~~~~~~~~~\n");
printf("Residence/Rent/Mortgage: ");
scanf("%lf", &rent);
printf("\nUtilities: ");
scanf("%lf", &utilities);
printf("\nPhone/Internet: ");
scanf("%lf", &phone);
printf("\nGroceries/Eating out: ");
scanf("%lf", &groceries);
printf("\nEntertainment: ");
scanf("%lf", &entertainment);
*pLiving = rent + utilities + phone + groceries + entertainment;
printf("\n\nTransportation: \n");
printf("~~~~~~~~~~~~~\n");
printf("Public Transportation: ");
scanf("%lf", &transportation);
printf("\nCar: ");
scanf("%lf", &car);
printf("\nAuto Insurance: ");
scanf("%lf", &insurance);
printf("\nGas/Maintenance: ");
scanf("%lf", &gas);
*pTransp = transportation + car + insurance + gas;
printf("\n\nOther: \n");
printf("~~~~~\n");
printf("Any other expenses: ");
scanf("%lf", &other);
*pOther = other;
return *pSchool, *pLiving, *pTransp, *pOther;
}
double get_income(double* pEmploy, double* pOther){
*pEmploy = *pOther = 0;
double wages, family, scholarship, other;
printf("\n\nEmployment income:\n");
printf("~~~~~~~~~~~~~~~~~\n");
printf("Expected Wages/Tips: ");
scanf("%lf", &wages);
*pEmploy = wages;
printf("\n\nOther income:\n");
printf("~~~~~~~~~~~\n");
printf("Family Support: ");
scanf("%lf", &family);
printf("\nScholarship/Bursaries (per semester): ");
scanf("%lf", &scholarship);
printf("\nOther: ");
scanf("%lf", &other);
*pOther = family + scholarship + other;
return *pEmploy, *pOther;
}
double display_report(double School, double Living, double Transp, double OtherExp, double Employ, double OtherInc) {
printf("\n\nStudent Name Budget Report\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("Expenses:\n");
printf("~~~~~~~~\n");
printf(" MONTHLY ANNUALY\n");
printf("School Expenses: $%.2lf $%.2lf\n", School, School * 12);
printf("Living Expenses: $%.2lf $%.2lf\n", Living, Living * 12);
printf("Transportation Expenses: $%.2lf $%.2lf\n", Transp, Transp * 12);
printf("Other Expenses: $%.2lf $%.2lf\n", OtherExp, OtherExp * 12);
printf("total Expenses: $%.2lf $%.2lf\n", School + Living + Transp + OtherExp, School * 12 + Living * 12 + Transp * 12 + OtherExp * 12);
printf("Income:\n");
printf("~~~~~~~\n");
printf("Employment Income: $%.2lf $%.2lf\n", Employ, Employ * 12);
printf("Other Income: $%.2lf $%.2lf\n", OtherInc, OtherInc * 12);
printf("Total Income: $%.2lf $%.2lf\n", Employ + OtherInc, Employ * 12 + OtherInc * 12);
printf("Total Savings Available for your Goals: $%.2lf $%.2lf\n", (Employ + OtherInc) - (School + Living + Transp + OtherExp), (Employ * 12 + OtherInc * 12)- (School * 12 + Living * 12 + Transp * 12 + OtherExp * 12));
return 0;
}
char get_char(char* pRecalculate){
int valid_input;
valid_input = 0;
while (valid_input == 0){
printf("\nWould you like to recalculate your budget? (Y/N): ");
scanf("%c", &*pRecalculate);
*pRecalculate = toupper(*pRecalculate);
if (*pRecalculate == 'Y' || *pRecalculate == 'y' || *pRecalculate == 'N' || *pRecalculate == 'n') valid_input = 1;
else printf("Error Invalid choice\n");
printf("\n");
}
return *pRecalculate;
}
void clear_buffer(void) {
while ( getchar() != '\n' );
}
double get_double()
{
// What to put here?
}
最佳答案
考虑流程序列,并考虑您希望程序或函数遵循的流程图/决策树。
在输入有效的输入之前,您不想停止询问用户输入。您保证至少询问用户一次,但也可能询问多次。输入有效或无效。
现在我们开始起草一些伪代码。我会这样做:
double get_double(void)
{
double d;
int ask_again = 1; /* continue if 1 (true), exit if 0 (false) */
do {
/* display message to user to let them know to type a number */
/* read user input */
if (/* user input didn't input a valid double */)
{
/* display appropriate error message */
}
else if (/* user entered a double, but it wasn't greater than or equal to zero */)
{
/* display appropriate error message */
}
else /* user entered valid input, so ... */
{
/* ... do something to make sure the loop exists */
}
} while (/* we need to ask again */);
}
这对我来说是 do-while,所以我把它写在 do-while 循环中。我提供了一个 int Ask_again
变量,但我将它留给您,它可能有用(如果有的话)。
您应该考虑所有注释所在的地方应该包含哪些真正的代码。
检查你的类(class)笔记,看看你的老师希望你知道哪些技巧可以在这里应用。
在所有计算机语言中,读取和清理用户输入都是一个臭名昭著的问题,尤其是 C。StackOverflow 可以让您了解如何执行特定操作。
关于c - 如何在 C 中创建一个验证用户输入的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11495816/
前言: 有时候,一个数据库有多个帐号,包括数据库管理员,开发人员,运维支撑人员等,可能有很多帐号都有比较大的权限,例如DDL操作权限(创建,修改,删除存储过程,创建,修改,删除表等),账户多了,管理
所以我用 Create React App 创建并设置了一个大型 React 应用程序。最近我们开始使用 Storybook 来处理和创建组件。它很棒。但是,当我们尝试运行或构建应用程序时,我们不断遇
遵循我正在创建的控件的代码片段。这个控件用在不同的地方,变量也不同。 我正在尝试编写指令来清理代码,但在 {{}} 附近插入值时出现解析错误。 刚接触 Angular ,无法确定我错过了什么。请帮忙。
我正在尝试创建一个 image/jpeg jax-rs 提供程序类,它为我的基于 post rest 的 Web 服务创建一个图像。我无法制定请求来测试以下内容,最简单的测试方法是什么? @POST
我一直在 Windows 10 的模拟器中练习 c。后来我改用dev C++ IDE。当我在 C 中使用 FILE 时。创建的文件的名称为 test.txt ,而我给出了其他名称。请帮助解决它。 下面
当我们创建自定义 View 时,我们将 View 文件的所有者设置为自定义类,并使用 initWithFrame 或 initWithCode 对其进行实例化。 当我们创建 customUITable
我正在尝试为函数 * Producer 创建一个线程,但用于创建线程的行显示错误。我为这句话加了星标,但我无法弄清楚它出了什么问题...... #include #include #include
今天在做项目时,遇到了需要创建JavaScript对象的情况。所以Bing了一篇老外写的关于3种创建JavaScript对象的文章,看后跟着打了一遍代码。感觉方法挺好的,在这里与大家分享一下。 &
我正在阅读将查询字符串传递给 Amazon 的 S3 以进行身份验证的文档,但似乎无法理解 StringToSign 的创建和使用方式。我正在寻找一个具体示例来说明 (1) 如何构造 String
前言:我对 C# 中任务的底层实现不太了解,只了解它们的用法。为我在下面屠宰的任何东西道歉: 对于“我怎样才能开始一项任务但不等待它?”这个问题,我找不到一个好的答案。在 C# 中。更具体地说,即使任
我有一个由一些复杂的表达式生成的 ILookup。假设这是按姓氏查找人。 (在我们简单的世界模型中,姓氏在家庭中是唯一的) ILookup families; 现在我有两个对如何构建感兴趣的查询。 首
我试图创建一个 MSI,其中包含 和 exe。在 WIX 中使用了捆绑选项。这样做时出错。有人可以帮我解决这个问题。下面是代码: 错误 error LGH
在 Yii 中,Create 和 Update 通常使用相同的形式。因此,如果我在创建期间有电子邮件、密码、...other_fields...等字段,但我不想在更新期间专门显示电子邮件和密码字段,但
上周我一直在努力创建一个给定一行和一列的 QModelIndex。 或者,我会满足于在已经存在的 QModelIndex 中更改 row() 的值。 任何帮助,将不胜感激。 编辑: QModelInd
出于某种原因,这不起作用: const char * str_reset_command = "\r\nReset"; const char * str_config_command = "\r\nC
现在,我有以下由 original.df %.% group_by(Category) %.% tally() %.% arrange(desc(n)) 创建的 data.frame。 DF 5),
在今天之前,我使用/etc/vim/vimrc来配置我的vim设置。今天,我想到了创建.vimrc文件。所以,我用 touch .vimrc cat /etc/vim/vimrc > .vimrc 所
我可以创建一个 MKAnnotation,还是只读的?我有坐标,但我发现使用 setCooperative 手动创建 MKAnnotation 并不容易。 想法? 最佳答案 MKAnnotation
在以下代码中,第一个日志语句按预期显示小数,但第二个日志语句记录 NULL。我做错了什么? NSDictionary *entry = [[NSDictionary alloc] initWithOb
我正在使用与此类似的代码动态添加到数组; $arrayF[$f+1][$y][$x+1] = $value+1; 但是我在错误报告中收到了这个: undefined offset :1 问题:尝试创
我是一名优秀的程序员,十分优秀!