1
votes
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
}

The error is in the first if block. There are cs50 libraries involved.

error: incompatible integer to pointer conversion initializing 'string' (aka 'char *') with an expression of type 'int' [-Werror,-Wint-conversion]

2
string val = printf(...)? printf returns an int, you need to allocate space and then use snprintf to return a string.David Ranieri
val only exists until the closing brace }, so the return should also be generating an error.user3386109
@user3386109 and missing ; in return statement, too.Sourav Ghosh

2 Answers

4
votes

The error message is self explanatory.

printf() returns an int, you cannot assign it to variable of type char*.

That said, you have multiple other issues:

  • The return statement uses a block scope variable, which is out of it's scope.
  • The return statement is missing a ; - syntax error.

To fix the code what you need to do is:

  • Allocate a buffer long enough to hold the final output. (Define a pointer and use allocated memory using malloc() or family, of sufficient size)
  • Use sprintf() to populate the memory with the output you need.
  • Return the pointer.
  • Once you're done using it, free() the returned pointer.
1
votes

You can use sprintf to save the formatted data to a string. Be aware that you need a buffer big enough to save the string.

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