Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 替换数组中的数据时遇到问题_C_Arrays_For Loop_Multidimensional Array_Scanf - Fatal编程技术网

C 替换数组中的数据时遇到问题

C 替换数组中的数据时遇到问题,c,arrays,for-loop,multidimensional-array,scanf,C,Arrays,For Loop,Multidimensional Array,Scanf,对于我必须做的一个项目,我必须列出一组课程,让用户选择要使用的课程,并打印出他们这学期的每周时间表。和我问的第一个问题一样。然而,当我试图打印出一个每周的时间表时,我似乎遇到了一个问题。这个程序相当长,至少以我在C语言方面的经验来说是如此 struct course { int index; char name[7]; char day[4]; int hours,houre,mins,mine; char ap[3]; int credit; }; struct course wh

对于我必须做的一个项目,我必须列出一组课程,让用户选择要使用的课程,并打印出他们这学期的每周时间表。和我问的第一个问题一样。然而,当我试图打印出一个每周的时间表时,我似乎遇到了一个问题。这个程序相当长,至少以我在C语言方面的经验来说是如此

struct course
{
 int index;
 char name[7];
 char day[4];
 int hours,houre,mins,mine;
 char ap[3];
 int credit;
};
struct course whcl[]={ {0,"MATH1","MWF",7,8,30,50,"AM",5},
                       {1,"MATH2","MWF",9,10,00,20,"AM",5},
                       {2,"CHEM1","MW ",2,6,30,50,"PM",5},
                       {3,"PHYS4","TTH",4,6,00,45,"PM",4},
                       {4,"ENGR1","M  ",9,10,30,20,"AM",1},
                       {5,"ENGR2","TTH",10,12,00,15,"PM",3},
                       {6,"ENGR3","MW ",11,12,00,15,"PM",3}};
int choice[15],i,j,k,num,z,s;
void printout(int z); //(To be put in when I fix the function)

int main(void)
{
 char l[8][3]={{"st"},{"nd"},{"rd"},{"th"},{"th"},{"th"},{"th"},{"th"}};
 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",
          whcl[i].index,whcl[i].name,whcl[i].day,
          whcl[i].hours/10,whcl[i].hours%10,
          whcl[i].mins/10,whcl[i].mins%10,
          whcl[i].houre/10,whcl[i].houre%10,
          whcl[i].mine/10,whcl[i].mine%10,
          whcl[i].ap,whcl[i].credit);
 }
 printf("How many classes would you like to take?: ");
 scanf("%i",&num);
 for(i=0;i<num;i++)
 {
  printf("Select the %i%s class using the index: ",i+1,l[i]);
  scanf("%i",&choice[i]);
 }
 printf("The classes you have selected are:\n");
 printf("Index  Course  Day       Time       Credit\n");
 printf("-------------------------------------------\n");
 for(i=0;i<num;i++)
 {
  s=choice[i];
  printf("  %i    %s   %s   %i%i:%i%i-%i%i:%i%i%s    %i\n",
          whcl[s].index,whcl[s].name,whcl[s].day,
          whcl[s].hours/10,whcl[s].hours%10,
          whcl[s].mins/10,whcl[s].mins%10,
          whcl[s].houre/10,whcl[s].houre%10,
          whcl[s].mine/10,whcl[s].mine%10,
          whcl[s].ap,whcl[s].credit);
 }
 printf("Your weekly schedule for Fall is:\n");
 printf("    Time     Monday   Tuesday   Wednesday   Thursday   Friday\n");
 printout(z);
 return 0;
}

void printout(int z)
{
 int start,starti,end,endi,num;
 int slot[25][6];
 for(i=0;i<24;i++)
  for(j=0;j<5;j++)
   slot[i][j]=99;
 for(i=0;i<num;i++)
 {
  if ((whcl[choice[i]].day)=="MWF")//I think the problem is here.
  {
   start=whcl[choice[i]].hours*60+whcl[choice[i]].mins;
   end=whcl[choice[i]].houre*60+whcl[choice[i]].mine;
   starti=(start-450)/30;
   endi=(end-450)/30;
   for(j=starti;j<=endi;j++)
    slot[j][1]=slot[j][3]=slot[j][6]=whcl[choice[i]].index;
  }
 }
 for(i=0;i<24;i++)
 {
  printf("%i%i:%i%i-%i%i:%i%i ",
         (450+(i-1)*30)/60/10,(450+(i-1)*30)/60%10,
         (450+(i-1)*30)%60/10,(450+(i-1)*30)%60%10,
         (450+(i-1)*30+30)/60/10,(450+(i-1)*30+30)/60%10,
         (450+(i-1)*30+30)%60/10,(450+(i-1)*30+30)%60%10);
  for(j=0;j<4;j++)
  {
   if (slot[i][j]!=99) //Use Note here
    printf(" %s       ",whcl[choice[i]].name);
   else
    printf("");
  }
  printf("\n");
 }
return;
}
当我打印出时间表时,唯一能想到的就是时间。其他的都是空白。我想这是因为我试图用99以外的东西替换插槽阵列。如果您计划运行此程序,请使用2表示您想要学习的课程数量,并使用0和1表示课程选择的索引。我没有任何if语句之类的东西来考虑用户可能选择的其他类。这是一张我正在为我的节目做什么的照片。我用油漆把时间表上的盒子放进去,以便在编码时直观地看到不同的阵列

注意:如果将If语句更改为[i][j]==99,则可以在表上看到正在打印的类,但是它填充了整个数组槽,这证实了我的想法,即我在尝试替换数组中的数据时出错了。另外,我用99填充它,使99与空格关联。

如果whcl[choice[I]].day==MWF//我想问题就在这里

正确,您需要使用strcmp来比较字符串,而不是==

尝试: 如果strcmpwhcl[choice[i]].day,MWF==0

Equality as==将检查指针是否相同,以便您可以:


char*a=MTW;char*b=a,然后a==b将为真

我用您提供的行替换了我的行。然而,当我运行它时,它仍然给我相同的输出。当我查看strcmp时,我读到它需要,但甚至添加了它,这并没有改变任何东西。@Kesakor-你是否通过了调试器?我不确定你所说的调试器是什么意思。我使用Ubuntu中的终端来GCC文件。@Kesakor如果你查看gdb,它会让你加载你的程序,一行一行地遍历,你可以在遍历的过程中打印出所有变量,你的函数运行得很好。问题是我在函数部分第二次声明num,尽管它是一个全局变量。这就是导致循环被跳过的原因。