【发布时间】:2013-12-23 09:44:33
【问题描述】:
我目前正在开发一个程序,在该程序中我列出了一个课程并让用户决定他们想参加哪个课程。但是,我遇到了使用 scanf 来确定程序将如何输出所选类的问题。
struct course
{
char name[7];
char day[4];
int hours,houre,mins,mine;
char ap[3];
int credit;
};
int main(void)
{
int s,i,num,cnum,j;
char l[8][3]={{"st"},{"nd"},{"rd"},{"th"},{"th"},{"th"},{"th"},{"th"}};
struct course class[]={{"MATH1","MWF",7,8,30,50,"AM",5},
{"MATH2","MWF",9,10,00,20,"AM",5},
{"CHEM1","MW ",2,6,30,50,"PM",5},
{"PHYS4","TTH",4,6,00,45,"PM",4},
{"ENGR1","M ",9,10,30,20,"AM",1},
{"ENGR2","TTH",10,12,00,15,"PM",3},
{"ENGR3","MW ",11,12,00,15,"PM",3}};
printf(" Fall Schedule\n");
printf("Index Course Day Time Credit\n");
printf("-------------------------------------------\n");
for(i=0;i<7;i++)
{
printf(" %i %s %s %i%i:%i%i-%i%i:%i%i%s %i\n",
i,class[i].name,class[i].day,
class[i].hours/10,class[i].hours%10,
class[i].mins/10,class[i].mins%10,
class[i].houre/10,class[i].houre%10,
class[i].mine/10,class[i].mine%10,
class[i].ap,class[i].credit);
}
printf("How many classes would you like to take?:\n");
scanf("%i",&num);
for(i=0;i<num;i++)
{
printf("Select the %i%s class using the index:\n",i+1,l[i]);
scanf("%i",&j);
}
for(i=0;i<num;i++)
printf(" %i %s %s %i%i:%i%i-%i%i:%i%i%s %i\n",
i,class[j].name,class[j].day,
class[j].hours/10,class[j].hours%10,
class[j].mins/10,class[j].mins%10,
class[j].houre/10,class[j].houre%10,
class[j].mine/10,class[j].mine%10,
class[j].ap,class[j].credit);
return 0;
}
每次我完成 scanf 时,它都会打印出最后一个选择的值(这是意料之中的,因为我只是将变量重新分配给一个数字)所以我想知道是否有人知道如何缓解这个问题。对代码的风格感到抱歉,我不想在编写 printf 语句时丢失数组的踪迹。我在 %s 和 %i 之间留有空格的原因与程序在显示表格时看起来“不错”有关。 (您可能必须运行代码才能完全知道我要做什么。另外,我没有将最后一个 printf 与前一个 for 循环放在一起的原因是我希望程序如何打印在用户输入了他们想要参加的所有课程后,从日程表中取出。)
【问题讨论】:
-
请:将参数缩进
printf()不那么深。将格式字符串保留在第一行,并将其余行的参数缩进与格式字符串的开头相同的级别。 -
用
%d而不是%i打印十进制整数。 -
您可能还喜欢
%02d的两位数小时和分钟,而不是手动提取数字。 -
%i在 C99 中被允许作为打印十进制整数的替代方式,主要是为了与scanf()对称。
标签: c arrays for-loop printf scanf