所以这是我的第一个 C 语言超初学者计算机编程问题。
我需要进行设置,以便有人可以在输入中输入他们的全名。这是规格的一部分-
“你需要做一些思考才能弄清楚如何让打印的名称与所有其他列对齐。第一个提示是它涉及将字符串连接在一起,称为连接。试一试,如果你想不通,看看这个文件夹中的下一个文档;它包含额外的提示。这个作业的部分目的是隐含地教你连接。不要使用制表符 (\t) 并确保你的 C/C++编辑器不产生制表符。
不要在这个程序中使用gets()。使用 scanf() 输入交互信息。如果您尝试使用gets(),您可能会非常沮丧。
本质上,报告中出现的所有数字都应右对齐和小数对齐。摘要中出现的所有数字都应不带前导空格(通常将数字与前一个单词分开的空格除外)。小时工资金额可以小于 10.00,因此请务必小心格式化。示例输出可能看起来正确,但如果事情与 10.00 美元以下的小时工资不相符,您仍然可能会被扣半分。” 其他提示:
您可以假设员工姓名始终是两个名字,一个名字和一个姓氏,用空格分隔。还假设在名字或姓氏中从来没有任何空格。这允许您使用两个 scanf() 调用而不是一个 gets() 调用。gets() 会引入一些奇怪的东西,使事情在以后无法正常工作。
您还可以假设两个名称的长度都不超过 10 个字符。
来自流程另一个员工的输入?question应该是单个字符。假设 N 或 n 将停止循环,但任何其他字符将继续循环。
有人知道怎么做吗?当我使用gets(他说不要这样做)时,循环会在第二次出现问题,它会在一行中询问姓名和薪水。如果我尝试使用 2 个 scanf 语句,我会崩溃或只有 1 个名称输入。
我在想唯一的方法是将名称输出到文本文件,然后再次读取它们。但是还有其他方法吗?我不允许单独询问姓名。正如规范中所说,用户可能会键入带有一个空格的全名。
这是我到目前为止编写的代码。我还需要所有总时间、加班时间和正常时间的总计。
//stupid program
#include <stdio.h>
#include <strings.h>
#include <math.h>
//global variables
FILE *reportfile; //output file
char department[21];
int count;
char name[21];
float hoursworked;
float hourlywage;
float overtimehoursworked;
float overtimehourlywage;
float gross;
char again;
char firstname;
char lastname;
float tothoursworked;
float totovertimehoursworked;
float totgross;
const float overtimerate = 1.5;
const float overtimethreshold = 40; //hours needed to get overtime
//function prototypes
void GetInfo(void);
void Finalreport(void);
//main
int main(void)
{
reportfile = fopen("c:\\class\\kpaul-pay.txt","w"); //open output file
//////////////////////////////////////////////////
// initialize accumulating variables
/////////////////////////////////////////////////
count = 0;
tothoursworked = 0;
totovertimehoursworked = 0;
totgross = 0;
GetInfo();
fclose(reportfile); //close output file
return 0;
}
void GetInfo (void)
{
printf("Mountain Pacific Corporation\n");
printf("Department Salary Program\n\n");
printf("Please enter the name of the department: ");
gets(department);
fprintf(reportfile, "Mountain Pacific Corporation\n");
fprintf(reportfile, "Department Salary Program\n\n");
fprintf(reportfile, "%s\n\n", department);
fprintf(reportfile, "Employee Reg Hrs Overtime Hrs Gross\n");
fprintf(reportfile, "-----------------------------------------------------------------\n");
do {
printf("\nEnter employee #1: ");
gets(name);
printf("Enter the hourly wage of %s", name);
scanf("%f", &hourlywage);
printf("\nEnter total number of hours: ");
scanf("%f", &hoursworked);
if (hoursworked<=overtimethreshold)
overtimehoursworked = 0;
else if (hoursworked > overtimethreshold)
overtimehoursworked = hoursworked - overtimethreshold;
gross = (hoursworked*hourlywage) + (overtimehoursworked*overtimehourlywage);
fprintf(reportfile, "%s%16.2f(%4.2f)%12.2f(%4.2f) $%7.2f", name, hoursworked, hourlywage, overtimehoursworked, hourlywage * overtimerate, gross);
tothoursworked = tothoursworked + hoursworked;
totovertimehoursworked = totovertimehoursworked +overtimehoursworked;
totgross = totgross + gross;
printf("\n");
printf("Would you like another conversion? ");
scanf ("%s", &again);
printf("\n\n");
} while (again!='N' && again!='n');
}