Ошибка в программе "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;
Объяснение кода листинга программы
В данном коде выполняется проход по строке, начиная с последнего символа, с целью найти последний символ новой строки или символ табуляции. При выполнении этого кода, возможны следующие шаги:
- Переменная
cpинициализируется значением, равным последнему символу строкиs. - Условие цикла while проверяет два условия:
cp >= sиcp == '\r' || cp == '\n'. - Если первое условие истинно, то происходит проверка второго условия. Если второе условие также истинно, то выполняется уменьшение значения переменной
cpна единицу. - Если значение переменной
cpравно нулю, то цикл while завершается. В результате выполнения данного кода, в переменнойcpбудет храниться значение, указывающее на последний символ новой строки или символ табуляции в строкеs.