我正在编写一个程序,通过计算变量ratePerHour,hoursWorked,bonus,overtimeSalary计算总薪水。一切正常,但是当我尝试运行它时,它不会存储任何变量的输入值,也不会进行计算。
我认为问题是因为我的readNumber函数有问题:
double readNumber(char *prompt) {
double val;
//print the prompt:
printf("%s", prompt);
scanf(" %lf", &val);
if (scanf("%lf", &val) != 1) {
printf("Invalid input.\n");
exit(0);
}
另一个问题是程序应该询问用户是否正在接受奖励,如果用户放n
它不应该要求他输入奖金,但由于某种原因,我的程序会
char readYesOrNo(char *prompt) {
char yn = 'n';
//display the prompt:
printf("%s", prompt);
yn = scanf(" %c", &yn);
//return the value
return(yn);
}
最后它将我的计算显示为零,所以我认为存储值有问题我将附上我的程序的图片。我真的很感激任何帮助,因为我一直在努力。
答案 0 :(得分:1)
在val
中,您应该返回exit(0)
或readYesorNo()
。
在scanf
中,即使您输入1
,也会返回N
的返回值create table Actuals
(
f_year varchar(02),
f_period varchar(02),
f_fund varchar(06),
f_org varchar(06),
f_pror varchar(06),
f_trans_amt decimal
);
。
答案 1 :(得分:1)
您认为需要多少次阅读val
??
double readNumber(char *prompt) {
double val; /* you have 1 val */
print the prompt:
printf("%s", prompt);
scanf(" %lf", &val); /* you read it the 1st time here (unneeded) */
if (scanf("%lf", &val) != 1) { /* you read whatever the next num is here */
printf("Invalid input.\n");
exit(0);
}
你可以更好地摆脱不需要的初始读取并返回double
,因为你已经宣布了要执行的功能,例如:
double readNumber (const char *prompt)
{
double val;
printf ("%s", prompt); /* print the prompt */
if (scanf ("%lf", &val) != 1) { /* read/validate the double value */
fprintf (stderr, "error: Invalid input.\n");
exit(0); /* you can handle the error how ever you like here
* since you are returning a double, indicating success or
* failure by numeric return is a difficult proposition.
*/
}
return val;
}
(注意:将prompt
作为const char *prompt
传递将有助于编译器进一步优化例程 - 知道prompt
不会发生变化)
(当你在C中更进一步时,你可以考虑一次用fgets
读一行,然后用sscanf
从缓冲区解析你需要的值,或者使用一对字符指针,允许将读取与解析/转换分离,从而更灵活地处理输入意外事件。)
给readNumber
一个尝试,如上所述(注意:readnumber
避免使用camelCase
变量,这些变量在C语言中并没有像C语言中那样有用,它是' sa风格的东西,所以它取决于你,但它肯定会以你可能不希望它为那些阅读你的C代码的方式脱颖而出)
其他答案涵盖了scanf
yn
的{{1}}回复,而this
没有按照您的想法行事,我在这里不再重复。