我再次。 C菜鸟。我正在编写一个程序来编写一个程序,提示用户输入信息,之后程序应该列出已输入的数据。我的代码只打印输入的最后一条记录信息。
例如,我为员工#1“Rookie Coder”输入以下信息作为第一个员工姓名,并分别输入25和40表示小时工资和工作小时数。然后,我为员工#2“慢学习者”输入以下信息作为第二个员工姓名,并分别输入20和45作为小时工资和工作小时数。该程序仅var variable name = answer
与“慢学习者”相关的信息。但我想打印输入的两个记录的信息。
有人可以提供我缺少的指导,以便打印两张唱片吗?谢谢C Rookie
prints
答案 0 :(得分:1)
您只有一组变量可用于循环的每次迭代。第一次通过循环存储的任何内容都会在第二次循环时被覆盖。因此,您只能存储最近输入的一组值。
您希望声明将数据作为数组的每个变量,这样您就可以保存多个值。
char deptname [5][21];
char firstname [5][10];
char lastname [5][10];
char fullname [5][21];
float hrsworked[5];
float hrwage[5];
...
do {
printf("Enter employee #%d: ", count+1);
scanf("%s %s", &firstname[count], &lastname[count]);
strcpy(fullname[count], firstname[count]);
strcat(fullname[count], " ");
strcat(fullname[count], lastname[count]);
printf("Enter the hourly wage of %s: ", fullname[count]);
scanf("%f", &hrwage[count]);
printf("Enter total number of hours: ");
scanf("%f", &hrsworked[count]);
printf("\nThank you. Process another employee? ");
scanf ("%s", &again);
printf("\n");
count++; // Increment the counting variable
} while (again != 'N' && again != 'n');
然后你需要遍历数组来打印每个元素:
int i;
for (i=0; i<count; i++) {
printf("%s, $%0.2f, %0.2f: \n", fullname[i], hrwage[i], hrsworked[i]);
}
答案 1 :(得分:0)
:)从你身边天真但不要担心。您只将最后数据存储到fullname, hrwage, hrsworked
中,因此只保存最后一个输出。您需要更好的数据结构来存储用户插入的数据。
1)如果您知道将有多少输入,您可以使用预定义的字符串数组作为名称的字符串,并使用浮点数表示小时和工资。
2)如果您不知道,那么您将需要一个缩放数据结构,例如列表,以便为其添加/添加/追加元素;)
然后最后但并非最不重要的是,在用输入填充它们之后,您需要使用for / while循环进行循环以打印数组或列表。
希望这会有所帮助!
答案 2 :(得分:0)
从下面的语句中删除&
符号,因为deptname
本身就是字符串
scanf("%s", &deptname);
从以下陈述中也做同样的事情
scanf("%s %s", &firstname, &lastname);
你想要打印所有记录,但最后只有一个printf,所以显然它只打印最后一个员工记录
printf("%s, $%0.2f, %0.2f: \n", fullname, hrwage, hrsworked);
如果您想在给出N&#39;之后打印所有员工数据?选项,您应该在此之前存储信息,我的建议是将所有条目置于结构中,然后使用结构数组并每次存储。