Search code examples
cif-statementcharuser-inputstrcmp

passing argument 1 and 2 of ‘strcmp’ makes pointer from integer without a cast [-Wint-conversion]


Hello so I've been working a little prgramme which is sort of a calculator (I'm a beginner) and well as you can see in the tittle at then end of the code, the two if strcmp doesn't work. And vscode is telling me (for the strcmp) Exception has occurred. Segmentation fault. But gcc is telling me what is in the tittle.

#include <stdio.h>
#include <string.h>

int main()
{

    float num1;
    float num2;
    float anwser;

    int rnum = 1;
    int hi = 0;

    char operator;
    char ifyorn;
    char y = 'y';
    char n = 'n';

    while (hi == 0)
    {

        printf("Enter operator +, -, /, x: ");
        scanf(" %c", &operator);
        printf("Enter num %d :", rnum++);
        scanf("%f", &num1);
        printf("Enter num %d :", rnum++);
        scanf("%f", &num2);

        switch (operator)
        {
        case '+':

            anwser = num1 + num2;
            printf("Do you want to continue y/n \n");
            scanf(" %c", &ifyorn);

            break;

        case '-':

            anwser = num1 - num2;
            printf("Do you want to continue y/n \n");
            scanf(" %c", &ifyorn);

            break;

        case 'x':

            anwser = num1 * num2;
            printf("Do you want to continue y/n \n");
            scanf(" %c", &ifyorn);

            break;

        case '/':

            anwser = num1 / num2;
            printf("Do you want to continue y/n \n");
            scanf(" %c", &ifyorn);

            break;

        default:

            printf("This is not a valid character please try again :(");

            break;
        }

        if(strcmp (ifyorn, n) == 0)
        {
            printf("%f", anwser);
             hi == 1;
        }

        if(strcmp (ifyorn, y) == 0)
        {
             hi == 0;
        }
    }
}

Solution

  • The variables ifyorn, y and n are declared having the type char.

    char ifyorn;
    char y = 'y';
    char n = 'n';
    

    The function strcmp expects arguments of the pointer type char * that point to strings.

    So these if statements

    if(strcmp (ifyorn, n) == 0)
    

    and

    if(strcmp (ifyorn, y) == 0)
    

    are incorrect. Instead you should write

    if ( ifyorn == n )
    

    and

    if ( ifyorn == y )
    

    Also instead of assignments you are using the comparison operator in these statements

     hi == 1;
    

    and

     hi == 0;
    

    You need to write

     hi = 1;
    

    and

     hi = 0;
    

    Increasing the variable rnum looks senseless

        printf("Enter num %d :", rnum++);
        scanf("%f", &num1);
        printf("Enter num %d :", rnum++);
        scanf("%f", &num2);
    

    Why not just to write

        printf("Enter num %d :", 1 );
        scanf("%f", &num1);
        printf("Enter num %d :", 2 );
        scanf("%f", &num2);
    

    And in the code snippet under the label default you should add one more statement

        default:
    
            printf("This is not a valid character please try again :(");
            ifyorn = y;
            break;