首页 > 解决方案 > 程序没有为变量分配正确的值

问题描述

我一般是编程新手,最近决定认真尝试学习 C。我正在尝试使用嵌套循环和数组构建一个轻量级帐户程序。

我正在尝试在 CodeBlocks 中构建程序。我的程序有点粗糙,

1)我的第一个问题是,在我的程序询问已经完成了多少周的工作之后,它会获取下一个循环的值,而忽略至少第一个循环的周值。

2) 输入除“1”以外的任何整数都会导致 tax 从内存中提取一个随机值,更糟糕的是,尽管“weeks”没有另一个 scanf 函数,但它可以覆盖“weeks”的值,通常会导致 for ...循环取决于可变周数以循环到数百万。

3) 我还没有为 void menu() 编写路径 5 和 6,因为程序的其余部分无法正常运行

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int pay = 10;
const int overtime;
float taxrate;
int hours; //user input for hours worked
int gross; //calculated integer for gross pay
int tax; //calculated integer for taxes
int net; //calculated integer for net pay
int gross_total = 0; //non printed value for summing gross
int i; //condition to exit loop
void tax_rate();
void menu();
void cust_paid_yn();
void hours_worked();
int menu_input;
int menu_break;
char c;
int unpaid;
int weeks;
int j;
int week_numb_array[];
int gross_array[];
int tax_array[];
int gross_total_array[];
void printfinal();

int main(void)
{
    menu();

    printf("How many weeks have been worked?\n");

    scanf("%d\n", &weeks);

    for (int j = 0; j <= weeks; j++)
    {
        while (menu_input = 1 || 2 || 3 || 4)
        {
            hours_worked();

            while ( hours != 1)
            {
                //uses hours to calculate gross, taxes, and net
                gross = (hours * pay);

                //use loop and gross to determine tax
                tax_rate();

                //uses hours to calculate taxes, net, and gross_total
                tax = (gross * taxrate);
                net = (gross - tax);
                gross_total += (net);

                gross_array[j] = gross;
                tax_array[j] = tax;
                gross_total_array[j] = gross_total;

                break;
            }

            printf("\nexited out of menu_input loop\n");
            break;
        }

        printf("\nexited out of tax loop\n");
        printf("\n \n %d\n \n", weeks);
        printf("\n \n %d\n \n", j);
    }

    printf("\nexited out of for...loop\n");
    j = 0;
    printfinal();
    return 0;
}


void printfinal()
{
    for (j = 0; j <= weeks; j++)
    {
        //Prints the title headers: gross pay, taxes and net pay
        printf("Week Numb\t gross pay   \t taxes   \t net pay\n");
        //Prints the calculations for gross, taxes, and net
        printf("week 1\t\t %ld   \t\t %ld   \t\t %ld \t\n", gross_array[j], 
        tax_array[j], gross_total_array[j]);
    }
    return 0;
}

void tax_rate()
{
    //use loop and gross to determine tax
    if (gross <= 300)
    {
        taxrate = .15;
    }
    else if (gross <= 450)
    {
        taxrate = .20;
    }
    else if (gross >= 451)
    {
        taxrate = .25;
    }
    return 0;
}

void menu()
{
    printf("Please make a selection from the following options\n 1) Set Pay 
    Rate to 8.75\n 2) Set Pay Rate to 9.33\n 3) Set Pay Rate to 10.00\n 4) Set Pay Rate to 11.20\n 5) Print Out List\n 6) Quit\n");
    scanf("%d", &menu_input);
    switch (menu_input)
    {
    case 1:
        printf("Pay Rate set to 8.75\n");
        menu_break = 0;
        pay = 8.75;
        break;
    case 2:
        printf("Pay Rate set to 9.33\n");
        menu_break = 0;
        pay = 9.33;
        break;
    case 3:
        printf("Pay Rate set to 10.00\n");
        menu_break = 0;
        pay = 10.00;
        break;
    case 4:
        printf("Pay Rate set to 11.20\n");
        menu_break = 0;
        pay = 11.20;
        break;
    case 5:
        menu_break = 1;
        printf("List Printed\n");
        break;
    case 6:
        printf("QUIT\n");
        menu_break = 2;
        break;
    default:
        printf("Unknown\n");
        menu_break = 3;
        break;
    }
    return 0;
}

void cust_paid_yn()
{
    for (i=0; i<1; 1)
    {
        //get input for whether cust. was paid
        printf("Was customer paid this week? (y/n)\n");
        scanf("%c", &c);
        //loop to check for y/n response
        switch (c)
        {
        case 'y':
            printf("\n");
            i=1;
            hours = (hours + unpaid);
            unpaid = 0;
            break;
        case 'n':
            printf("hours logged\n");
            i=1;
            unpaid = (unpaid + hours);
            hours = 0;
            break;
        default:
            printf("\n");
            i=0;
            break;
        }
        break;
    }
    return 0;
}

void hours_worked()
{
    //asks how many hours were worked
    printf("How many hours were worked?\n \nIf no work was done enter 0\n");
    //gets user input for hours worked
    scanf("%ld", &hours);
    return 0;
}

我只想创建一个程序:

1)获取用户输入程序将循环多少次(请参阅weeks var)

2) 使用数组打印出用户数据

非常感谢任何帮助和建议,我不知道为什么我的程序会从内存中提取随机值。

标签: carraysloopswhile-loopnested

解决方案


推荐阅读