Ошибка в программе "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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д