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

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

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

Здравствуйте! В моей программе возникла ошибка: "IntelliSense: несовместимые типы операндов ("char" и "char *")". Вот сама программа:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
 
int getrest(char *s, int k, int m)
{
    char *cp = s + strlen(s) - 2; 
//  char *cp=s;
    while (*cp >= s && (*cp == '\r' || *cp =='\n')) --cp; 
    int rest = 0; 
    int p = 1; 
    int digit; 
    while (cp >= s) { 
        if (*cp >= '0' && *cp <= '9')
            digit = *cp - '0';
        else
        if (*cp >= 'A' && *cp <= 'J') 
            digit = *cp - 'A' + 10;
        else
        if (*cp >= 'a' && *cp <= 'j') 
            digit = *cp - 'a' + 10;
        else { 
            printf("Недопустимый символ [%c]!\n", *cp);
            return -1;
        }
        if(digit >= k) { /* цифра получилась больше системы счисления - не допустимо! */
            printf("Недопустимый символ <%c>!\n", *cp);
            return -1;
        }
        rest = rest + p * digit % m; 
        p = p * k % m; 
        //printf("%d %d %d\n", digit, rest, p);
        --cp;
    }
    return rest;
}
 
int main ()
{
    setlocale(LC_ALL, "rus");
    char str[101]; /* буфер для строки k-ичных цифр */
    fflush(stdin); 
    printf("Введите систему счисления (от 2 до 20): ");
    fgets(str, 101, stdin); 
    int k = atoi(str); /* считываем систему счисления */
    if (k < 2 || k > 20) { /* по условиям может быть от 2 до 20 */
        printf("Неверная система счисления!");
        return 1;
    }
    printf("Введите число m: ");
    fgets(str, 101, stdin); 
    int m = atoi(str); 
    printf("Введите число n в k-ичной системе счисления, не более 100 разрядов: ");
    fgets(str, 101, stdin); 
 
    int rest = getrest(str, k, m);
    if (rest >= 0)
        printf("Остаток от деления на m равен %d\n", rest);
    _getch();
    return 0;
}
Конкретно ошибка в этой строке:
    while (*cp >= s && (*cp == '\r' || *cp =='\n')) --cp;
И компилятор подчёркивает знак ">=" в этой строке. Помогите, пожалуйста, устранить эту ошибку! Заранее спасибо!

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

textual
Листинг программы
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
Похожие ответы