我的函数在 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);
}
我正在尝试使用 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);
}