2010-09-12 67 views
2

我正在做我的項目來實現一個打字導師應用在Turbo C編譯器 (這是限制),這個函數實際上是一個查找表的x,y和關鍵字符,但它返回我在參數中傳遞的第一個值的垃圾值。 從第二開始就開始做對了。 請注意,x,y是在時間返回兩個值的指針。 請檢查我的錯誤是什麼。問題發生在案例結構

s1 = "ASDF JKL; ADSF JLK; "; 
char take_xy(char s1[], int j, int *x, int *y) 
{ 
    char ch; 
    switch(s1[j]) 
    { 
     case 'Q' : *x = 137; *y = 244; ch = 'Q'; break; 
     case 'W' : *x = 160; *y = 244; ch = 'W'; break; 
     case 'E' : *x = 183; *y = 244; ch = 'E'; break; 
     case 'R' : *x = 206; *y = 244; ch = 'R'; break; 
     case 'T' : *x = 229; *y = 244; ch = 'T'; break; 
     case 'Y' : *x = 252; *y = 244; ch = 'Y'; break; 
     case 'U' : *x = 275; *y = 244; ch = 'U'; break; 
     case 'I' : *x = 298; *y = 244; ch = 'I'; break; 
     case 'O' : *x = 321; *y = 244; ch = 'O'; break; 
     case 'P' : *x = 344; *y = 244; ch = 'P'; break; 

     case 'A' : *x = 144; *y = 268; ch = 'A'; break; 
     case 'S' : *x = 167; *y = 268; ch = 'S'; break; 
     case 'D' : *x = 190; *y = 268; ch = 'D'; break; 
     case 'F' : *x = 213; *y = 268; ch = 'F'; break; 
     case 'G' : *x = 236; *y = 268; ch = 'G'; break; 
     case 'H' : *x = 259; *y = 268; ch = 'H'; break; 
     case 'J' : *x = 282; *y = 268; ch = 'J'; break; 
     case 'K' : *x = 305; *y = 268; ch = 'K'; break; 
     case 'L' : *x = 328; *y = 268; ch = 'L'; break; 
     case ';' : *x = 351; *y = 268; ch = ';'; break; 
//  case ''' : *x = 374; *y = 268; ch = '''; break; 

     case 'Z' : *x = 162; *y = 292; ch = 'Z'; break; 
     case 'X' : *x = 185; *y = 292; ch = 'X'; break; 
     case 'C' : *x = 208; *y = 292; ch = 'C'; break; 
     case 'V' : *x = 231; *y = 292; ch = 'V'; break; 
     case 'B' : *x = 254; *y = 292; ch = 'B'; break; 
     case 'N' : *x = 277; *y = 292; ch = 'N'; break; 
     case 'M' : *x = 300; *y = 292; ch = 'M'; break; 
     case '?' : *x = 369; *y = 292; ch = '?'; break; 

     case ' ' : *x = 189; *y = 316; ch = ' '; break; 

    } 
    return ch; 
}  
+1

發佈您用來調用它的代碼。我也不明白你爲什麼在函數外有一個單獨的's1'變量。 – 2010-09-12 02:18:50

+3

順便說一下,它看起來像你可以刪除所有'ch ='...''語句,並且只是從這個函數返回s1 [j]';但正如馬修所說,它看起來很好,所以問題可能出在調用'take_xy'的代碼中,而不是函數本身。 – 2010-09-12 02:27:16

回答

0

您發佈的代碼沒有錯,錯誤必須在其他地方。

3

我會檢查你是如何調用這個函數的。我猜測'j'參數小於0或大於19.

也在調試器中運行並在第一次調用時檢查所有參數的值。

正如@Matthew Flaschen所說,讓我們看看調用代碼。

編輯

您可能要還添加了一個default條款趕上任何不匹配。

3

它看起來像sl [j]的內容可能不在該開關中,所以「ch」在堆棧中創建時具有其包含的任何默認值。

我會做下列之一:

  1. 在開關使用它之前歸一化SL [J]中的內容。
  2. 向交換機添加「默認」標籤。
  3. 聲明時將「ch」初始化爲某個默認值(等同於選項2)。
+0

默認不是問題。第二我已經通過調試器檢查過,但沒有問題,如果我添加默認值,那麼它返回的默認值,它不會進入案例結構。 – 2010-09-12 02:39:06

+0

這告訴我,sl [j]的內容沒有被交換機覆蓋。當您調試到該功能時,它具有什麼價值? – 2010-09-12 02:49:20