首页 > 解决方案 > 使用 fprintf 的错误,它以某种方式首先将后面的行而不是前面的行打印到文本文件中

问题描述

这是我正在使用的代码。如果我问了一个无用的问题,我很抱歉。

int normal_fee(int type, int case_3_status)
    {
        int fee;
        fee = 0;
        switch (type)
        {
        case 1:
            fee = 30;
            break;
        case 2:
            fee = 40;
            break;
        case 3:
            switch (case_3_status)
            {
            case 1:
                fee = 380;
                break;
            case 2:
                fee = 160;
                break;
            case 3:
                fee = 180;
                break;
            }
            break;
        case 4:
            fee = 50;
            break;
        case 5:
            fee = 100;
            break;
        case 6:
            fee = 50;
            break;
        default:
            printf("Invalid answer given");
        }
        return fee;
};

int urgent_fee(int type, int case_3_status)
{
    int fee;
    switch (type)
    {
    case 1:
        fee = 50;
        break;
    case 2:
        fee = 70;
        break;
    case 3:
        switch (case_3_status)
        {
        case 1:
            fee = 430;
            break;
        case 2:
            fee = 200;
            break;
        case 3:
            fee = 210;
            break;
        }
        break;
    case 4:
        fee = 80;
        break;
    case 5:
        fee = 150;
        break;
    case 6:
        fee = 75;
        break;
    default:
        printf("Invalid answer given");
    }
    return fee;
};

int check_urgent(int days)
{
    int urgent;
    printf("It will need %d days to finish\n", days);
    printf("Are you in urgent?\n");
    printf("1. Yes\n2. No\n");
    printf("Note: Extra fee will be charged for an urgent request\n");
    printf("Enter your options:");
    scanf("%d", &urgent);
    return urgent;
};

int view_services(int counter_status)
{
    int services_choice;
    system("cls");
    if (counter_status == 1)
    {
        printf("Invalid answer given");
        printf("Please enter a valid option\n");
    }

    printf("---Welcome---\n");
    printf("1. Remove virus, malware or spyware\n2. Troubleshot and fix computer running slow\n3. Laptop Hardwares Replacement\n4. Operating System Format and installation\n5. Data backup and Recovery\n6. Internet Connectivity Issues\n");
    printf("Choose an option: ");
    scanf("%d", &services_choice);
    return services_choice;
};

int check_days(int service, int replacement)
{
    int needed_days;
    switch (service)
    {
    case 1:
        needed_days = 2;
        break;
    case 2:
        needed_days = 2;
        break;
    case 3:
        switch (replacement)
        {
        case 1:
            needed_days = 3;
            break;
        case 2:
            needed_days = 2;
            break;
        case 3:
            needed_days = 1;
            break;
        }
        break;
    case 4:
        needed_days = 2;
        break;
    case 5:
        needed_days = 2;
        break;
    case 6:
        needed_days = 1;
        break;
    default:
        printf("Invalid answer given");
    }
    return needed_days;
};

int update_tos()
{
    int services, status;
    status = 0;
    services = view_services(0);
    while (status == 0)
    {
        switch (services)
        {
        case 1:
            service1();
            status = 1;
        }
    }
    return services;
}


void update_visitor()
{
    char visitor_id[50], line[BUFFER_SIZE];
    int c_id, v_id, n_days, service, replacement, customer_status, tot_fee;
    replacement = 0;
    printf("Enter visitor ID: ");
    scanf("%d", &v_id);
    //// Need to confirm whether the customer is correct
    printf("Enter Customer ID: ");
    scanf("%d", &c_id);
    sprintf(visitor_id, "%d", v_id);
    FILE* fptr;
    FILE* ftemp;
    ftemp = fopen("testin.txt", "a");
    fptr = fopen(visitor_id, "r");

    fprintf(ftemp, "Visit ID: %d\n", v_id);
    fprintf(ftemp, "Customer ID: %d\n", c_id);

    service = update_tos();

    n_days = check_days(service, replacement);
    customer_status = check_urgent(n_days);
    switch (customer_status)
    {
        case 1:
        tot_fee = urgent_fee(service, replacement);
        case 2:
        tot_fee = normal_fee(service, replacement);
    }
    if (customer_status == 1)
    {
        fprintf(ftemp, "Customer Status: Urgent\n");
        fprintf(ftemp, "Needed Days: 1\n");
    }
    else 
    {
        fprintf(ftemp, "Customer Status: Normal\n");
        fprintf(ftemp, "Needed Days: %d\n", n_days);
    }
    fprintf(ftemp, "Total Fee: %d\n", tot_fee);
    fprintf(ftemp, "Payment: Not Made\n");
}

int service1()
{
    FILE* ftemp;
    ftemp = fopen("testin.txt", "a");
    int choice, status;
    status = 0;
    printf("1. Remove Virus\n2. Remove Malware\n3. Remove Spyware\n4. Others\n");
    printf("Enter your options: ");
    scanf("%d", &choice);
    while (status == 0)
    {
        switch (choice)
        {
        case 1:
            fprintf(ftemp, "TOS: Remove Virus\n");
            status = 1;
            break;
        case 2:
            fprintf(ftemp, "TOS: Remove Malware\n");
            status = 1;
            break;
        case 3:
            fprintf(ftemp, "TOS: Remove Spyware\n");
            status = 1;
            break;
        case 4:
            fprintf(ftemp, "TOS: Remove Virus, Malware or Spyware\n");
            status = 1;
            break;
        default:
            printf("Invalid answer given");
            printf("Enter your options: ");
            scanf("%d", &choice);
        }
    }
    fclose(ftemp);
    return choice;
}

int main()
{
    update_visitor();
}

总结是我声明要打印客户和访问 ID 而是在文本文件中首先打印 TOS 的事实。

ftemp = fopen("testin.txt", "a");
fptr = fopen(visitor_id, "r");

fprintf(ftemp, "Visit ID: %d\n", v_id);
fprintf(ftemp, "Customer ID: %d\n", c_id);

service = update_tos();

n_days = check_days(service, replacement);
customer_status = check_urgent(n_days);
switch (customer_status)
{
    case 1:
    tot_fee = urgent_fee(service, replacement);
    case 2:
    tot_fee = normal_fee(service, replacement);
}
if (customer_status == 1)
{
    fprintf(ftemp, "Customer Status: Urgent\n");
    fprintf(ftemp, "Needed Days: 1\n");
}
else 
{
    fprintf(ftemp, "Customer Status: Normal\n");
    fprintf(ftemp, "Needed Days: %d\n", n_days);
}
fprintf(ftemp, "Total Fee: %d\n", tot_fee);
fprintf(ftemp, "Payment: Not Made\n");

这是 v_id 的文本文件

Visit ID: 55555
Customer ID: 26547
TOS: Data backup and Recovery
Customer Status : Normal
Needed Days : 2
Total Fee : 100
Payment : Not Made

这是运行程序后的testin.txt的文本文件

TOS: Remove Malware
Visit ID: 55555
Customer ID: 26547
Customer Status: Normal
Needed Days: 2
Total Fee: 30
Payment: Not Made

不知何故,TOS 在顶部?不是应该在访问ID和客户ID之前吗?错误在哪里?

标签: c

解决方案


推荐阅读