2011-11-28 52 views
1

我寫代碼的時鐘和我創建一個函數來顯示其被存儲在數組中的時間[]從函數引用數組

char time[]="23:59:45   "; 
char display_time(char *t[], char *, char *, char *); 

void main(void)    
{ 
      display_time(&time, &hr, &min, &sec); 
      GLCD_GoTo(5,3); 
      GLCD_WriteString(time, Font_System7x8); 
} 

的時間,這是我的功能

char display_time(char *t[], char *h, char *m, char *s) 
{ 

       *t[0]=*h/10+48; 
       *t[1]=*h%10+48; 
       *t[3]=*m/10+48; 
       *t[4]=*m%10+48; 
       *t[6]=*s/10+48; 
       *t[7]=*s%10+48; 


} 

一切都很好編譯,但我的時間沒有得到更新,只有初始化值正在顯示。

+7

如果您在課堂上學到了'void main(void)',現在是切換講師的時候了。 –

+4

將您的編譯器警告級別提高到最高..並且**請注意警告** – pmg

+0

您從不顯示應該實際更新時間的代碼。我假設你在某個地方實際上修改了這些值[],你應該發佈你的代碼來做這件事,這樣我們就可以看到可能發生了什麼問題。 – Jarek

回答

1
  • 請與警告編譯器(gcc -Wall -Wextra)
  • DISPLAY_TIME應該返回void
  • 主要應該返回int和採取任何(int, char*[])(),但不是(void)
  • 您可以通過提高lisibility傳遞值(而不是指針)
  • 使用'0'而不是48,再次爲lisibility
  • 您沒有初始化hr。分鐘和秒在你的代碼。
  • 你應該測試如果h 24之間0等
  • 你應該測試NULL指針
  • display_time沒有「顯示時間」,寫的功能,一個更好的名字,你就大功告成了: - )

void display_time(char t[], int h, int m, int s) { 
    t[0] = h/10 + '0'; 
    t[1] = h % 10 + '0'; 
    t[3] = m/10 + '0'; 
    t[4] = m % 10 + '0'; 
    t[6] = s/10 + '0'; 
    t[7] = s % 10 + '0'; 
} 

int main(int, char*[]) { 
    char time[] = "23:59:45"; 
    int hr = 3, min = 9, sec = 42; 
    display_time(time, hr, min, sec); 
    GLCD_GoTo(5,3); 
    GLCD_WriteString(time, Font_System7x8); 
    return 0; 
} 
-1

您的類型錯誤。您不應該發送char *t[],因爲您沒有傳遞指針數組。此外,您可能沒有意識到,但&timetime相同,沒有「時間地址」。你只想將char *傳遞給你的函數。

+0

'&time'和'time'是什麼意思? –

+0

這就是數組聲明的工作方式。試試吧,做printf(「%x%x」,&time,time);它會打印兩個相同的地址 – TJD

+0

從我所瞭解的來看,它們**不同**,因爲它們有不同的類型。 'time'是'char [9]','&time'是'char *'。在你調用'printf'的時候,這是一個可變參數函數,並且你有一個int類型的隱式轉換(因爲'%x'需要一個無符號的十六進制整數)。 –