Ошибка в программе "IntelliSense: несовместимые типы операндов" - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! В моей программе возникла ошибка: "IntelliSense: несовместимые типы операндов ("char" и "char *")". Вот сама программа:
Листинг программы
  1. #include <conio.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <locale.h>
  6. int getrest(char *s, int k, int m)
  7. {
  8. char *cp = s + strlen(s) - 2;
  9. // char *cp=s;
  10. while (*cp >= s && (*cp == '\r' || *cp =='\n')) --cp;
  11. int rest = 0;
  12. int p = 1;
  13. int digit;
  14. while (cp >= s) {
  15. if (*cp >= '0' && *cp <= '9')
  16. digit = *cp - '0';
  17. else
  18. if (*cp >= 'A' && *cp <= 'J')
  19. digit = *cp - 'A' + 10;
  20. else
  21. if (*cp >= 'a' && *cp <= 'j')
  22. digit = *cp - 'a' + 10;
  23. else {
  24. printf("Недопустимый символ [%c]!\n", *cp);
  25. return -1;
  26. }
  27. if(digit >= k) { /* цифра получилась больше системы счисления - не допустимо! */
  28. printf("Недопустимый символ <%c>!\n", *cp);
  29. return -1;
  30. }
  31. rest = rest + p * digit % m;
  32. p = p * k % m;
  33. //printf("%d %d %d\n", digit, rest, p);
  34. --cp;
  35. }
  36. return rest;
  37. }
  38. int main ()
  39. {
  40. setlocale(LC_ALL, "rus");
  41. char str[101]; /* буфер для строки k-ичных цифр */
  42. fflush(stdin);
  43. printf("Введите систему счисления (от 2 до 20): ");
  44. fgets(str, 101, stdin);
  45. int k = atoi(str); /* считываем систему счисления */
  46. if (k < 2 || k > 20) { /* по условиям может быть от 2 до 20 */
  47. printf("Неверная система счисления!");
  48. return 1;
  49. }
  50. printf("Введите число m: ");
  51. fgets(str, 101, stdin);
  52. int m = atoi(str);
  53. printf("Введите число n в k-ичной системе счисления, не более 100 разрядов: ");
  54. fgets(str, 101, stdin);
  55. int rest = getrest(str, k, m);
  56. if (rest >= 0)
  57. printf("Остаток от деления на m равен %d\n", rest);
  58. _getch();
  59. return 0;
  60. }
Конкретно ошибка в этой строке:
Листинг программы
  1. while (*cp >= s && (*cp == '\r' || *cp =='\n')) --cp;
И компилятор подчёркивает знак ">=" в этой строке. Помогите, пожалуйста, устранить эту ошибку! Заранее спасибо!

Решение задачи: «Ошибка в программе "IntelliSense: несовместимые типы операндов"»

textual
Листинг программы
  1. while (cp >= s && (*cp == '\r' || *cp =='\n')) --cp;

Объяснение кода листинга программы

В данном коде выполняется проход по строке, начиная с последнего символа, с целью найти последний символ новой строки или символ табуляции. При выполнении этого кода, возможны следующие шаги:

  1. Переменная cp инициализируется значением, равным последнему символу строки s.
  2. Условие цикла while проверяет два условия: cp >= s и cp == '\r' || cp == '\n'.
  3. Если первое условие истинно, то происходит проверка второго условия. Если второе условие также истинно, то выполняется уменьшение значения переменной cp на единицу.
  4. Если значение переменной cp равно нулю, то цикл while завершается. В результате выполнения данного кода, в переменной cp будет храниться значение, указывающее на последний символ новой строки или символ табуляции в строке s.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы