我的函数在 C 中不能正常工作?

My functions are not working properly in C?

我正在尝试使用 C 语言做一个简单的计算器。我创建了 4 个函数,分别用于加法、乘法、减法和除法。但是,当我调用主函数中的函数时,它们无法正常工作。即使我键入“+”、“-”、“/”,结果总是成倍增加。这可能是什么问题?

一些词的翻译要清楚:arti = plus,eksi = minus,carpi = cross,bolum = divide,carpim = multiplication,toplama = addition,cikartma = subtraction,bolme = divison

谢谢:)

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

你有两个主要问题:

  • 首先是数组 islem 是一个 元素的数组,它不能容纳任何东西,更不用说以 null 结尾的了字符串

  • 第二个问题是您读取单个字符,并在将其传递给 strcmp 函数(str 前缀表示它处理以 null 结尾的字符串)。

要解决这些问题,请将 islem 设为单个字符:

char islem;

并使用 scanf 传递指针读取它:

scanf(" %c", &islem);

然后使用普通比较运算符进行比较:

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

另一方面,您不需要 sonuc 变量,也不应将其传递给函数。相反,该函数可以在本地定义 result 变量:

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

而且您也不需要 result 变量:

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