While循环和getchar函数辅助

While循环和getchar函数辅助,c,C,我是C编程新手,在做这个问题时遇到了一些问题,需要使用while循环和嵌套开关函数。如果用户的输入在循环开始时为-1,则开关终止 我应该使用getchar()函数来确定while循环是否继续 我曾试图用-1替换EOF,但后来发现getchar()只读取一个字符-1'是两个字符。它还读取一个字符,如果它是整数,则将始终作为无符号整数返回 内容还可以,我只是在while循环中遇到了问题,getchar函数: while (paycode = getchar()) != EOF) 其中,将导致wh

我是C编程新手,在做这个问题时遇到了一些问题,需要使用while循环和嵌套开关函数。如果用户的输入在循环开始时为-1,则开关终止

我应该使用getchar()函数来确定while循环是否继续

我曾试图用-1替换EOF,但后来发现getchar()只读取一个字符-1'是两个字符。它还读取一个字符,如果它是整数,则将始终作为无符号整数返回

内容还可以,我只是在while循环中遇到了问题,getchar函数:

 while (paycode = getchar()) != EOF)
其中,将导致while循环结束的输入应为-1。我还面临一个问题,由于某种原因,prinf(“Enter pacode”)会重复两次。我知道代码可能看起来有点混乱和未优化,请原谅

任何建议、优化、建议和反馈都将不胜感激。附件是我的代码样本

int main(void)

{
    int paycode, managersalary, grossweeklysales, overtime;
    float hourlysalary,comissionsalary ,piecepay, piecenumber, piecewage;

    unsigned int totalhours, managercount = 0, hourlycount = 0, comissioncount = 0 , piececount = 0;

    printf("Enter paycode (-1 to end): ");

    while ( (paycode = getchar()) != EOF) { //How to replace by EOF with -1? Do I use default: then?
        //what If I use switch loop only or with a for loop?


        switch (paycode) {

        case '1':
            printf("Manager selected.\n");
            printf("Enter weekly salary: ");
            scanf("%d", &managersalary);
            printf("Manager's pay is $%d", managersalary);

            managercount++;
                break;

        case '2':
            printf("Hourly worker selected.\n");
            printf("Enter hourly salary: ");
            scanf("%f", &hourlysalary);
            printf("Enter total hours worked: ");
            scanf("%d", &totalhours);
                    
            if (totalhours > 40) {
                overtime = totalhours - 40;
                printf("Worker worked %d overtime hours\n", overtime);
            }
                
                printf("Worker's pay is $%.2f.", (hourlysalary*40)+(1.5*hourlysalary)*overtime);
                    break;  

        case'3':
            printf("Comission worker selected.\n");
            printf("Enter gross weekly sales: ");
            scanf("%d", &grossweeklysales);
            comissionsalary = 250 + grossweeklysales*(5.7 / 100);
            printf("Comission worker's pay is $%.2f", comissionsalary);

            comissioncount++;
                break;

        case '4':
            puts("Pieceworker selected.");
            printf("Enter number of pieces: ");
            scanf("%f", &piecenumber);
            printf("Enter number of pieces: ");
            scanf("%f", &piecewage);
            piecepay = piecenumber * piecewage;

            printf("Pieceworker's pay is $%.2f", piecepay);

            piececount++;
            break;
            
        }
        printf("Enter paycode (-1 to end): ");



如果您询问如何在控制台输入上创建文件结束条件,这取决于操作系统。在类似Unix的OSs上,键入Ctrl-D。在Windows上,我认为是Ctrl-Z。更大的问题可能是混合使用getchar()和scanf()。
EOF
不必是
-1
,它可以是任何负数。
getchar()
返回一个数字。如果它成功读取一个字符,则返回该字符。(字符只是小数字)。如果无法读取字符,则返回
EOF
(可能等于也可能不等于
-1
EOF
是一个不等于任何字符的数字<代码>-1也是一个数字,而不是“两个字符”,这与
EOF
不是“三个字符”完全相同。