Почему значение моего strcmp не равно 0 или недопустимо?

#c

#c

Вопрос:

Я все еще новичок в программировании, и есть много вещей, которых я до сих пор не знаю, но я хотел бы спросить, почему мой оператор if, похоже, не работает должным образом. Кажется, значение strcmp(bookName, tolower(searchedName)) , когда переменная searchedName = "introduction to c" не равна 0. Почему это?

 #include <stdio.h>
#include <string.h>
#include <ctype.h>

int main() {
  char bookName[30] = "introduction to c programming";
  char searchedName[30];

  printf("Enter the book you are searching for:  ");
  scanf("%s", amp;searchedName);

  if (strcmp(bookName, tolower(searchedName)) != 0) {
    printf("The book is not in elibrary");
  } else {
    printf("The book is in elibrary");
  }

  return 0;
}
  

Комментарии:

1. Включите предупреждения при сборке, и вам будет дана действительно большая подсказка или две.

2. tolower(searchedName) не следует компилировать.

3. Подсказка: cplusplus.com/reference/cctype/tolower (Работает с одним персонажем …)

4. Вам не нужно amp; перед searchedName . amp; используется только тогда, когда вам нужен адрес примитивного типа.

5. потому что «введение в программирование на c» — это не то же самое, что «введение в c»

Ответ №1:

  • tolower() предназначено для преобразования символов, а не строк. Вам придется применять его к каждому символу в строке отдельно.
  • В этом случае вам не нужны amp; массивы before, потому что массивы в выражениях автоматически преобразуются в указатели (за исключением некоторых случаев).
  • %s in scanf() остановится на пробельном символе. %[^n] полезно читать до тех пор, пока не попадете на символ новой строки.

Попробуйте это:

 #include <stdio.h>
#include <string.h>
#include <ctype.h>

int main() {
  char bookName[30] = "introduction to c programming";
  char searchedName[30];
  char searchedName_lower[30];
  int i;

  printf("Enter the book you are searching for:  ");
  scanf("%[^n]", searchedName);

  i = 0;
  do {
    searchedName_lower[i] = tolower((unsigned char)searchedName[i]);
  } while (searchedName[i  ] != '');

  if (strcmp(bookName, searchedName_lower) != 0) {
    printf("The book is not in elibrary");
  } else {
    printf("The book is in elibrary");
  }

  return 0;
}