Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

My functions are not working properly in C?

I am trying to do a simple calculator using C. I have created 4 functions which are doing addition, multiplication, subtraction and divison. However, when I call the functions in the main function, they are not working correctly. The results are always multiplied even if I type "+", "-", "/". What may be the problem here?

Translation of some words to be clear: arti = plus, eksi = minus, carpi = cross, bolum = divide, carpim = multiplication, toplama = addition, cikartma = subtraction, bolme = divison

Thanks 🙂

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

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

int carpim(int numOne, int numTwo, int result){
    
    result = numOne * numTwo;
    printf("Sonuc: %d", result);
    return 0;
    
}

int toplama(int numOne, int numTwo, int result){
    
    result = numOne + numTwo;
    printf("Sonuc: %d", result);
    return 0;
    
}

int cikartma(int numOne, int numTwo, int result){
    
    result = numOne - numTwo;
    printf("Sonuc: %d", result);
    return 0;

}

int bolme(int numOne, int numTwo, int result){
    
    result = numOne / numTwo;
    printf("Sonuc: %d", result);
    return 0;

}

int main(){
    
    char islem[0];
    char arti[] = "+";
    char eksi[] = "-";
    char carpi[] = "x";
    char bolum[] = "/";
    int sayiBir;
    int sayiIki;
    int sonuc = 0;
    
    printf("(+)\n(-)\n(x)\n(/)\nIstediginiz islemin sembolunu girin:");
    scanf("%c", islem);
    
    printf("Ilk sayiyi girin: ");
    scanf("%d", &sayiBir);
    printf("Ikinci sayiyi girin: ");
    scanf("%d", &sayiIki);
    
    if (strcmp(islem, arti)) {
        toplama(sayiBir, sayiIki, sonuc);
    }
    else if (strcmp(islem, carpi)){
        carpim(sayiBir, sayiIki, sonuc);
    }
    else if (strcmp(islem, eksi)){
        cikartma(sayiBir, sayiIki, sonuc);
    }
    else if (strcmp(islem, bolum)){
        bolme(sayiBir, sayiIki, sonuc);
    }
    
}

>Solution :

You have two major problems:

  • The first is that the array islem is an array of zero elements, it can’t hold anything much less a null-terminated string

  • The second problem is that you read a single character, and attempt to use it as a null-terminated string when you pass it to the strcmp functions (the str prefix means it handles null-terminated strings).

To solve these problems, make islem a single character:

char islem;

and read it using scanf passing a pointer:

scanf(" %c", &islem);

Then compare using normal comparison operator instead:

if (islem == '+') {
    toplama(sayiBir, sayiIki, sonuc);
}

On another note, you don’t need the sonuc variable, and should not pass it to the functions. Instead the function can define the result variable locally:

void carpim(int numOne, int numTwo){
    int result = numOne * numTwo;
    printf("Sonuc: %d", result);
}

And you don’t really need the result variable either:

void carpim(int numOne, int numTwo){
    printf("Sonuc: %d", numOne * numTwo);
}
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading