c - 使用 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之前吗?错误在哪里?
解决方案
推荐阅读
- macos - FindGLEW.cmake No Rule To Make Target Error [已解决]
- selenium - Jenkins 找不到文件,即使它存在于工作场所 Selenium File not found: Selenium::WebDriver::Error::InvalidArgumentError)
- python - 我有一个 API 结果的 python 烧瓶错误(可能是我的列表的原因)和我的数据库
- python - 使用每行元组创建熊猫数据框但缺少列
- shell - 无法使用 exec 在 Go 中为 docker 运行 netstat
- javascript - 使用滚动将固定标题添加到 li
- date - 如何从这种 Twilio 格式 2019-08-22 06:12:58 MDT 的文本字符串中提取月份中的一周?
- javascript - 获取呼叫冻结
- c - 如何从带有尾数的双精度数中获取浮点值?
- python - 无法抓取此特定 div 类