函数问题(char *提示) - 计算

时间:2016-10-15 06:46:00

标签: c

我正在编写一个程序,通过计算变量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);
 }

最后它将我的计算显示为零,所以我认为存储值有问题我将附上我的程序的图片。我真的很感激任何帮助,因为我一直在努力。

enter image description here

2 个答案:

答案 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没有按照您的想法行事,我在这里不再重复。