Присвоение строковой переменной дает ошибку указателя - PullRequest
1 голос
/ 08 апреля 2020
string reading_lev(int a, int b, int c)
{
    float L = (a / b) * 100;
    float S = (c / b) * 100;
    float index = 0.0588 * L - 0.296 * S - 15.8;
    if (round(index) <= 16 && round(index) >= 1)
    {
        string val = printf("Grade %f", index);
    }
    else if (round(index) > 16)
    {
        string val = printf("Grade 16+");
    }
    else
    {
        string val = printf("Before Grade 1");
    }
    return val
}

Ошибка в первом , если блок. Вовлечены библиотеки cs50.

ошибка: несовместимое целочисленное преобразование в указатель, инициализирующее 'string' (также называемое 'char *') выражением типа 'int' [-Werror, -Wint-translation]

Ответы [ 2 ]

4 голосов
/ 08 апреля 2020

Сообщение об ошибке не требует пояснений.

printf() возвращает int, его нельзя присвоить переменной типа char*.

Сказано, что у вас есть несколько других проблем:

  • В операторе возврата используется переменная области видимости блока, которая находится за пределами ее области действия.
  • В операторе возврата отсутствует синтаксис ; - ошибка.

Чтобы исправить код, вам нужно сделать следующее:

  • Выделить буфер достаточно долго, чтобы сохранить окончательный вывод. (Определите указатель и используйте выделенную память, используя malloc() или семейство достаточного размера)
  • Используйте sprintf(), чтобы заполнить память требуемым выводом.
  • Вернуть указатель.
  • Как только вы закончите с этим, free() возвращенный указатель.
1 голос
/ 08 апреля 2020

Вы можете использовать sprintf , чтобы сохранить отформатированные данные в строку. Помните, что вам нужен достаточно большой буфер для сохранения строки.

http://www.cplusplus.com/reference/cstdio/sprintf/

...