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

Time:05-22

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;
        }
    }
}

CodePudding user response:

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;

CodePudding user response:

You don't have to be mean to the guy ,he is learning.

You are getting this error because you are passing characters to strcmp() instead of pointers to characters.

Here is more information regarding that function.

https://www.programiz.com/c-programming/library-function/string.h/strcmp

  • Related