我的 C 函数无法正常工作?

Iha*_*asi -1 c runtime-error function calculator

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

一些单词的翻译要清楚:arti = 加、eksi = 减、carpi = 交叉、bolum = 除法、carpim = 乘法、toplama = 加法、cikartma = 减法、bolme = 除法

谢谢 :)

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

Run Code Online (Sandbox Code Playgroud)

Som*_*ude 5

你有两个主要问题:

  • 首先,该数组是一个islem元素数组,它不能容纳任何内容,更不能容纳以空结尾的字符串

  • 第二个问题是,您读取单个字符,并在将其传递给函数时尝试将其用作以 null 结尾的字符串strcmpstr前缀意味着它处理以 null 结尾的字符串)。

为了解决这些问题,制作islem一个单一的角色:

char islem;
Run Code Online (Sandbox Code Playgroud)

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

scanf(" %c", &islem);
Run Code Online (Sandbox Code Playgroud)

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

if (islem == '+') {
    toplama(sayiBir, sayiIki, sonuc);
}
Run Code Online (Sandbox Code Playgroud)

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

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

而且您实际上也不需要该result变量:

void carpim(int numOne, int numTwo){
    printf("Sonuc: %d", numOne * numTwo);
}
Run Code Online (Sandbox Code Playgroud)