我研究了这个错误,但一直没能找到.另外,我对此还是个新手.我想学习C语言的基础知识,下面是我的第一个程序.我想修改函数calc中的sum,这样它就是float,以防有人除以例如2/5.

#include <stdio.h>

int getNumber1() {
    int myNumber1;
    printf("\n gib eine Zahl ein: ");
    scanf("%d", &myNumber1);
    return myNumber1;
}

int getNumber2() {
    int myNumber2;
    printf("\n gib eine weitere Zahl ein: ");
    scanf("%d", &myNumber2);
    return myNumber2;
}

char getOp() {
    char myOp;
    printf("\n gib einen Operanten ein: ");
    scanf(" %c", &myOp);
    return myOp;
}

void calc(int number1, int number2, char op) {
    if (op == '+') {
        int sum = number1 + number2;
        printf("\n\n%d %c %d = %d", number1, op, number2, sum);
    }
    if (op == '-') {
        int sum = number1 - number2;
        printf("\n\n%d %c %d = %d", number1, op, number2, sum);
    }
    if (op == '*') {
        int sum = number1 * number2;
        printf("\n\n%d %c %d = %d", number1, op, number2, sum);
    }
    if (op == '/') {
        float sum = number1 / number2;
        printf("\n\n%d %c %d = %.2f", number1, op, number2, sum);
    }
}

int main() {
    int cont = 1;
    while (cont == 1) {
        int number1 = getNumber1();
        int number2 = getNumber2();
        char op = getOp();
        calc(number1, number2, op);
        printf("\nMoechten Sie weitere Berechnungen durchfuehren? (1 fuer Ja, 0 fuer Nein): ");
        scanf("%d", &cont);
    }
    printf("\nDanke und auf Wiedersehen.");
    return 0;
}

但我得到的错误是conversion to float from int may alter its value.为什么会这样?我怎样才能解决这个错误?

推荐答案

编译器发出该消息,因为一个整数值被赋给了浮点类型的变量float.

在本声明中

float sum = number1 / number2;

使用整数算术对表达式number1 / number2求值.因此,将变量赋给Float类型的变量并没有多大意义.

取而代之的是为了举例而写

float sum = ( float )number1 / number2;

C++相关问答推荐

如何通过Zephyr(Devicetree)在PR Pico上设置UTE 1?

在Windows上构建无聊的SSL x64

为什么PLT表中没有push指令?

在函数中使用复合文字来初始化C语言中的变量

为什么在C中进行大量的位移位?

在一个小型玩具项目中实现终端历史记录功能

进程已完成,退出代码为138 Clion

如何在提取的索引中分配空值?

如何在GDB中查看MUSL的源代码

如何使用libgpio(d)为Raspberry Pi编译C程序?

将变量或参数打包到 struct /联合中是否会带来意想不到的性能损失?

C语言中的数字指针

C-try 将整数和 struct 数组存储到二进制文件中

具有正确标头的C struct 定义问题

某些EAX值的不同调用方的CPUID结果不一致

在NASM中链接Linux共享库时出错-';将R_ X86_64_;foo';

WSASocket在哪里定义?

'printf("%s", user_input)' 危险吗?

使用共享变量同步多线程 C 中的函数

GDB 用内容初始化数组