2016-09-25 70 views
-2

我正在写一个程序,它显示了从一个城市到另一个城市的每日航班:为什么我在C编程中遇到类型说明符错误?

Departure time:    Arrival Time 
    8:00       10:16 am 
    9:43 am      11:52 am 
    11:19 am       1:31p.m 
    12:47 pm      3:00pm 
    2:00pm       4:08 p.m 
    3:45 p.m       5:55 p.m 
    7:00pm       9:20p.m 
    9:45p.m       11:58 p.m 
    My program asks the user to enter time in 24 hour clock then it displays the departure and arrival times for the flight whole departure time is closest to the the entered by user. 
    ex: enter a 24-hour time: 13:15 
    Closest departure time is 12:47 p.m driving at 3.00 pm 

我几乎用我的代码做了,但我发现,我似乎无法找出错误为什么。

#include<stdio.h> 
#include<math.h> 
int d1,d2,d3,d4,d5,d6,d7,d8,hh,mm,um; 
int departure[8]; 
int choice,id; 
char m1[80]="Closet Departure time is 8:00 A.M,arriving at 10:16 A.M"; 
char m2[80]="Closet Departure time is 9:43 A.M,arriving at 11:52 A.M"; 
char m3[80]="Closet Departure time is 11:19 A.M,arriving at 1:31 P.M"; 
char m4[80]="Closet Departure time is 12:47 P.M,arriving at 3:00 P.M"; 
char m5[80]="Closet Departure time is 02:00 P.M,arriving at 4:08 P.M"; 
char m6[80]="Closet Departure time is 03:45 P.M,arriving at 5:55 P.M"; 
char m7[80]="Closet Departure time is 07:00 P.M,arriving at 9:20 P.M"; 
char m8[80]="Closet Departure time is 09:45 P.M,arriving at 11:58 P.M"; 

int d1=8*60; 
departure[0]=d1; 

int d2=9*60+43; 
departure[1]=dept2; 

int d3=11*60+19; 
departure[2]=dept3; 

int d4=12*60+47; 
departure[3]=dept4; 

int d5=14*60; 
departure[4]=dept5; 

int d6=15*60+45; 
departure[5]=dept6; 

d7=19*60; 
departure[6]=dept7; 

d8=21*60+45; 
departure[7]=dept8; 




int main() 
{ 
    do 
    { 

     printf("Enter a time in 24-hour format:"); 
     //prompt for time in hh and mm 
     scanf("%d:%d",&hh,&mm); 

     //calculate time in minutes 
     um=hh*60+mm; 

     int closeDepartureIndex=0; 
     int closeDeparture=usertime-departure[0]; 

     //find the closest time 
     for(index=1;index<8;index++) 
     { 
      if(abs((um-departure[index]))<closeDeparture) 
      { 
       closeDeparture= usertime-departure[index]; 
       closeDepartureIndex=index; 
      } 
     } 


     //pring message of corresponding index 
     if(closeDepartureIndex==0) 
      printf("%s",m1); 
     else if(closeDepartureIndex==1) 
      printf("%s",m2); 
     else if(closeDepartureIndex==2) 
      printf("%s",m3); 
     else if(closeDepartureIndex==3) 
      printf("%s",m4); 
     else if(closeDepartureIndex==4) 
      printf("%s",m5); 
     else if(closeDepartureIndex==5) 
      printf("%s",m6); 
     else if(closeDepartureIndex==6) 
      printf("%s",m7); 
     else if(closeDepartureIndex==7) 
      printf("%s",m8); 

    return 0; 
} 

的代码应该工作,但我打赌的错误是类型说明符缺失,出发的重新定义,数组下标是不是一个整数,和非对象类型char

+1

是什么包含文件和行号的完整的实际错误消息? – melpomene

+2

您在屏幕右侧显示确切的错误信息。您绝对没有理由未能将您的问题纳入其中,以便我们也可以获得这些详细信息。 –

+0

我知道,但我试图修复它,并有问题这样做。 –

回答

3

首先,你的编译器应该告诉你每个错误都在哪条线上。看看这些线,你应该能够弄清楚每个错误应该如何修复。

例如,用gcc编译代码我得到一个错误信息:

main.c:16:5: error invalid initializer 

16告诉我的错误是在main.c中的第16行;确切地说,错误发生的5字符变成文件main.c的文件行16。无效的初始化器的确是您的离开[x] = y语句之一。无论如何,我会尽力打破我在代码片段中看到的错误。请让我知道,如果有什么不清楚。


在你的代码块中:

int d1=8*60; 
departure[0]=d1; 

int d2=9*60+43; 
departure[1]=dept2; 

int d3=11*60+19; 
departure[2]=dept3; 

int d4=12*60+47; 
departure[3]=dept4; 

int d5=14*60; 
departure[4]=dept5; 

int d6=15*60+45; 
departure[5]=dept6; 

d7=19*60; 
departure[6]=dept7; 

d8=21*60+45; 
departure[7]=dept8; 

你已经通过D8在你的第三行中已经定义D1。所以这至少是你的重新定义错误之一。如果你想像全局那样初始化它们,可能会从第三行删除它们。此外,一堆数组赋值使用尚未声明的变量(例如,您可能意思是departure[1] = d2;而不是departure[1] = dept2;)。另外,我从来没有像以前那样初始化一个全局数组。我不确定这会实际工作,但我很可能是错的。我的直觉是将你的离开[x]语句粘贴到某个函数中,并将该函数作为main中的第一行。喜欢的东西:

void initializeArray() 
{ 
    // departure[x] = y; statements here 
} 

然后里面主要:

int main() 
{ 
    initializeArray(); 

    // the rest of your main function here 
} 


内,您的主要功能,你有一对夫妇未声明的变量:indexusertime

“指数”在提及你的for循环中main功能:

//find the closest time 
for(index=1;index<8;index++) 
{ 
    if(abs((um-departure[index]))<closeDeparture) 
    { 
     closeDeparture= usertime-departure[index]; 
     closeDepartureIndex=index; 
    } 
} 

您需要首先声明指数为整数。至少像

int index; 

需要for循环之前被卡在,所以它的内容更是这样的:

//find the closest time 
int index; 
for(index=1;index<8;index++) 
{ 
    if(abs((um-departure[index]))<closeDeparture) 
    { 
     closeDeparture= usertime-departure[index]; 
     closeDepartureIndex=index; 
    } 
} 

然后它看起来像你可能只需要更换usertimeum


你还缺少收盘while您do-while循环。你的主要功能应该多读这样的:

int main() 
{ 
    do 
    { 
     // your main things 
    } while(/* some condition of your choice */); 
    return 0; 
} 


我不知道如果这些是你的编译器告诉你有关的错误的100%,但我相信,他们在其中最不重要的。你应该留下更多的东西像下面(这并编译我的gcc的,我没有测试它,看它是否真正你想要做什么,它只是编译没有错误):

#include<stdio.h> 
#include<math.h> 
int hh,mm,um; 
int departure[8]; 
int choice,id; 
char m1[80]="Closet Departure time is 8:00 A.M,arriving at 10:16 A.M"; 
char m2[80]="Closet Departure time is 9:43 A.M,arriving at 11:52 A.M"; 
char m3[80]="Closet Departure time is 11:19 A.M,arriving at 1:31 P.M"; 
char m4[80]="Closet Departure time is 12:47 P.M,arriving at 3:00 P.M"; 
char m5[80]="Closet Departure time is 02:00 P.M,arriving at 4:08 P.M"; 
char m6[80]="Closet Departure time is 03:45 P.M,arriving at 5:55 P.M"; 
char m7[80]="Closet Departure time is 07:00 P.M,arriving at 9:20 P.M"; 
char m8[80]="Closet Departure time is 09:45 P.M,arriving at 11:58 P.M"; 

int d1=8*60; 
int d2=9*60+43; 
int d3=11*60+19; 
int d4=12*60+47; 
int d5=14*60; 
int d6=15*60+45; 
int d7=19*60; 
int d8=21*60+45; 

void initializeDepartures() 
{ 
    departure[0]=d1; 
    departure[1]=d2; 
    departure[2]=d3; 
    departure[3]=d4; 
    departure[4]=d5; 
    departure[5]=d6; 
    departure[6]=d7; 
    departure[7]=d8; 
} 


int main() 
{ 
    initializeDepartures(); 

    do 
    { 

     printf("Enter a time in 24-hour format:"); 
     //prompt for time in hh and mm 
     scanf("%d:%d",&hh,&mm); 

     //calculate time in minutes 
     um=hh*60+mm; 

     int closeDepartureIndex=0; 
     int closeDeparture=usertime-departure[0]; 

     //find the closest time 
     int index; 
     for(index=1;index<8;index++) 
     { 
      if(abs((um-departure[index]))<closeDeparture) 
      { 
       closeDeparture= usertime-departure[index]; 
       closeDepartureIndex=index; 
      } 
     } 


     //pring message of corresponding index 
     if(closeDepartureIndex==0) 
      printf("%s",m1); 
     else if(closeDepartureIndex==1) 
      printf("%s",m2); 
     else if(closeDepartureIndex==2) 
      printf("%s",m3); 
     else if(closeDepartureIndex==3) 
      printf("%s",m4); 
     else if(closeDepartureIndex==4) 
      printf("%s",m5); 
     else if(closeDepartureIndex==5) 
      printf("%s",m6); 
     else if(closeDepartureIndex==6) 
      printf("%s",m7); 
     else if(closeDepartureIndex==7) 
      printf("%s",m8); 
    } while(1); 

    return 0; 
} 
+0

谢谢,除了隐式声明库函数abs的错误,类型为int(int) –

+0

@ J.Doe''#include ' – melpomene

+0

'非常感谢您的惊人。我试图在终端上运行这个,当我收到这些错误时尝试做gcc。hm2.c:136:错误:重新定义'main' hm2.c:4:note:'main'的先前定义在这里 –

相关问题