2013-10-07 4 views
1

Обратите внимание, что это является REPOST, я разъяснил свой пост, чтобы быть более понятнымSearching символьного типа ** для струнного

void searchArray(char ***array, int count){ 

    char * word = ""; 


    printf("Enter a word: "); 
    fscanf(stdin, " "); 
    fscanf(stdin, "%c", &word); 
    bool found = false; 
    for(int i = 0; i < count; i++){ 
      if(strcmp(word, (*array)[i]) == 0){ 
        found = true; 
        break; 
      } 
    } 
    if(found) printf("%s found!\n", word); 
    else if (!found) printf("%s not found!\n", word); 
} 

В тестировании, код возвращает «не найден!» для каждого входа.

Вышеупомянутый код, который у меня есть для поиска и перемещения массива типа char ** ... Я не уверен, что я ошибаюсь в своей логике пересечения или если я неправильно использую strcmp ... Любой Помощь будет принята с благодарностью!

Вот код для вставки, которые могут помочь прояснить, что именно я пытаюсь сделать:

int insertWord(char **array, int *count, char word[]) 
{ 
    char *wordPtr; 

    wordPtr = (char *)malloc((strlen(word) + 1) * sizeof(char)); 
    if (wordPtr == NULL) 
    { 
     fprintf(stderr," Malloc of array[%d] failed!\n", *count); 
     return -1; 
    } 
    /* Memory for this word has been allocated, so copy characters 
     and insert into array */ 

    strcpy(wordPtr, word); 

    array[*count] = wordPtr; 
    (*count)++; 

    return 0; 
} 

Моя задача поиска определенной строки в этих данных.

+0

Строки из 'массива', заканчивающиеся на' \ 0'? Я думаю, что ваш 'fscanf (stdin,"% c ", &word);' не будет положить '\ 0' в конце, и это может быть причиной. –

+0

Прочтите этот [ответ] (http://stackoverflow.com/a/17506236/2455888) – haccks

+2

'fscanf (stdin,"% c ", & something)' только читает * ОДИН ХАРАКТЕР *. Вы уверены, что не хотите что-то вроде 'char word [80]:' и 'fscanf (% s%, word); '? – paulsm4

ответ

1
void searchArray(char ***array, int count){ 

    char word[80]; 

    printf("Enter a word: "); 
    fscanf(stdin, " "); 
    fscanf(stdin, "%s", word); 
    bool found = false; 
    for(int i = 0; i < count; i++){ 
      if(strcmp(word, (*array)[i]) == 0){ 
        found = true; 
        break; 
      } 
    } 
    if(found) printf("%s found!\n", word); 
    else if (!found) printf("%s not found!\n", word); 
} 

Этот код работает отлично. Я думаю, что, поскольку я использовал fscanf (stdin, «% c», & слово); он читал в знаке открытого пространства из предыдущей строки (в буфере), а затем искал его ... это то, как это работает?

Спасибо!

+0

Я поразился, что ваш код работает отлично !!! – haccks

+0

@haccks lol! !!!! – Riptyde4

+0

Я действительно серьезно! – haccks

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