2015-01-15 2 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» * .... oh no .... – CoryKramer

+0

_ @ OP_ И каков ваш вопрос, пожалуйста? –

+2

Черт, этот компилятор старше меня ... –

ответ

0

Я использовал Turbo C (даже не ++), но это было давным-давно ... А если серьезно, я полагаю:

  • cnic представляет собой массив символов размером 13 (12 + завершающий нуль)
  • cnic2 должен быть двумерным массивом из 100 массивов символов размером 13 (это не то, что t написано в вашем коде)
  • вы хотите увидеть, если cnic C-строка уже находится в cnic2, если вы ее отклоните, если вы не добавите ее.
  • j - это индекс следующего элемента в cnic2 и должен быть явно установлен на 0 перед основным циклом.

Декларация:

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

(вы код был объявить массив из 13 C-Ctring размера 100)

цикла испытаний (включая код проверен с помощью 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 строк, btw limme check. –

+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, который я написал ранее, он не отклоняет его. –

Смежные вопросы