2012-05-22 34 views
-1

我正在做一個程序,要求用戶輸入姓名和身份證號......然後我添加了一個搜索功能,例如搜索名稱「bob」,它表示「Bob被發現與ID陣列位置x:XXXXX」程序輸出C中的隨機數

我的問題是,‘ID:代碼XXXX’部分是給我的隨機數字......這應該是如1234,但它給我,就像4210832

東西

下面是代碼

void search_surname() 
{ 
    int index, found=0; 
    char surname_to_find[10]; 

    printf("Please enter the student surname to search for\n\n"); 
    gets(surname_to_find); 
    fflush(stdin); 
    system("cls"); 
    for(index=0;index<height_of_array;index++) 
    { 

     if(strcmpi(surname_to_find, surname[index]) == 0) 
     { 
      found=1; 

      system("cls");              
      printf("%s found in array position %i, with the ID: %i \n\n", surname_to_find,  
      index+1, id[array_index]); 
      getch(); 

我不是100%肯定它爲什麼給我隨機數

謝謝。

+0

編譯時是否啓用了警告? –

+4

'gets'不應該在任何情況下使用。它會打開一個緩衝區溢出漏洞,除非不使用'gets',否則**不能被修復。除此之外,你真的需要縮進你的代碼。 – ThiefMaster

+1

什麼是'id [array_index]'? – dasblinkenlight

回答

1

你已經張貼代碼,以便不完整的,這是不可能指出確切的答案。所以取而代之,一種方式來解決這個問題:

  • 首先,它的怪異,你正在使用的不是id[array_index]​​,如index是在for循環的變量。 (array_index未在您的函數中定義;是全局嗎?請避免使用全局變量!)。
  • 您的示例代碼中沒有任何地方是id被填充或甚至聲明。確認它被正確填充。首先使用id而不填寫值會打印出奇怪的東西(未初始化)。調試器應該確認它的正確填充是否容易。否則,只需循環並打印出來即可。
  • 使用調試器觀察程序運行。

最後一件事:C有結構。沒有理由使用這樣的多個數組。

struct surname_info { 
    unsigned int id; 
    const char *surname; 
}; 
⋮ 
struct surname_info surnames[10]; 
surnames[0].id = 1234; 
surnames[0].surname = "Bob"; 
/* etc */ 
+0

Array_index是一個全局。該ID是從先前的輸入存儲的。現在我只希望它以相應的名稱輸出 – AppleAssassin

+0

@ChristopherRobbieBarclayKel:當您查找*名稱*時,您正在使用'index',但是當您嘗試打印該ID時,則使用'array_index'。這是兩個不同的變量。你找到的索引是在'索引'中,你爲什麼要在不同的位置查找ID? – derobert