2015-01-15 85 views
-3

實際上我想比較一個字符串與一個2d數組。如果輸入的字符串已經存在於數組中,程序應該終止。如果字符串不存在,那麼它應該存儲在數組的下一行。 這段代碼正在做的事情是它沒有告訴輸入的「cnic」是否曾經被輸入過。我正在使用Turbo C++ 3.0編譯器,請記住這一點。比較一個字符串與2d數組

該程序實際上是對用戶的cnic進行檢查,並檢查該cnic是否先前已輸入過。

這是我的計劃

  cout<<"\nEnter Your CNIC?\n"; 
     gets(cnic); 
     **for (i=0;i<=13;i++) 
     { 
      if (strcmp(cnic,cnic2)==0) 
      { 
       cout<<"This Cnic has already casted the vote"; 
      } 
     } 
     cnic2[i][j]=cnic[i]; 
     j++;** 
+10

*「我正在使用Turbo C++ 3.0編譯器」* ....哦沒有.... – CoryKramer

+0

_ @ OP_請問您有什麼問題? –

+2

該死的,那個編譯器比我老... –

回答

0

我用的Turbo C(甚至沒有++),但它是很久很久以前......更嚴重的是,我認爲:

  • cnic是一個大小爲13的字符數組(12 +終止null)
  • cnic2應該是一個大小爲13的100個char數組的2D數組(它不是wha t寫在你的代碼中)
  • 你想看看如果cnic C字符串已經在cnic2,如果是你拒絕它,如果不是你添加它。
  • jcnic2中下一個元素的索引,並且在主循環之前應明確設置爲0。

宣言:

char cnic2[100][13]; 
int found; /* should be bool found but unsure if Turbo C++ knows about that */ 

(你代碼被聲明大小100的13 C-Ctring的陣列)

測試環路(包括由OP的檢查和測試代碼):

/* should control size of nic before that processing - I ASSUME IT HAS BEEN DONE */ 
found = 0; /* should be found = false; and later use false and true instead of 0 and 1 */ 
for(i=0; i<j; i++) { 
    if (0 == strcmp(cnic, cnic2[i]) { 
     found = 1; 
     break; 
    } 
} 
if (found) { 
    cout<<"This Cnic has already casted the vote"; 
    continue; 
} 
if (j == 99) { 
    count << "Too much Cnic already"; 
    break; 
} 
strcpy(cnic2[j++], cnic); 


/* Revised and Working Code 

found = 0; /* should be found = false; and later use false and true instead of 0 and 1 */ 

for(i=0; i<j; i++) { 

    if (0 == strcmp(cnic, cnic2[i])) 
    { 
     found = 1; 
     break; 
    } 

} 
if (found) { 
    cout<<"This Cnic has already casted the vote"; 
    continue; 
} 
if (j == 99) { 
    cout << "Too much Cnic already"; 
    break; 
} 
strcpy(cnic2[j++], cnic); 
+0

謝謝你的答覆,由cnic [100] [13]我的意思是13 coloumns和100行,順便檢查一下。 –

+0

謝謝你,我在代碼中做了一些改動,現在它工作正常。 –

0

專注於您用**標記的代碼。錯誤編號如下:

for (i=0;i<=13;i++) // (1) 
{ 
    if (strcmp(cnic,cnic2)==0) // (2) 
    { 
     cout<<"This Cnic has already casted the vote"; 
    } 
} 
cnic2[i][j]=cnic[i]; // (3) 

對於錯誤(1),您循環的次數太多。你想循環從0到12,或使用< 13,而不是<= 13

對於錯誤(2)strcmp()的第二個參數是錯誤的。您想比較從cnic2[j]開始的字符串。

對於錯誤(3),您正在訪問一個元素外的界限兩個數組的,因爲i將是13

我不會解決這些對於你,因爲你的代碼做更多。我的答案指出顯然是錯誤的。

+0

感謝您的回覆,我編輯了我的代碼,但是當我重新輸入之前寫過的cnic時,它並未拒絕它。 –