首页 > 解决方案 > printf 在 scanf 之后不打印正确的值(例如 5 打印为 6618624)

问题描述

我写了一个使用函数的简单计算器。

#include<stdio.h>

void operation_menu();
int getNumber(int,int);
int sum(int,int);
int diff(int,int);
int mult(int,int);
double quot(double,int);
int choice,num1,num2;

int main(){

    getNumber(num1,num2);
    operation_menu();

return 0;
    
}

int getNumber(int num1,int num2){

    printf("Welcome to Simple Calculator!\n");
    printf("Please input a number to begin:\n");
    scanf("%d", &num1);
    printf("Great! Now input the second number:\n");
    scanf("%d", &num2);

}
void operation_menu(){

    printf("Select an operation: \n");
    printf("1. Addition\n");
    printf("2. Subtraction\n");
    printf("3. Multiplication\n");
    printf("4. Division\n");
    scanf("%d", &choice);

    switch(choice){
        case 1:
            printf("The sum of %d and %d is %d.", num1,num2,sum(num1, num2));
        break;
        case 2:
            printf("The difference of %d and %d is %d.", num1,num2,diff(num1, num2));
        break;
        case 3:
            printf("The product of %d and %d is %d.", num1,num2,mult(num1, num2));
        break;
        case 4:
            printf("The quotient of %d and %d is %.2lf.", num1,num2,quot(num1, num2));
        break;
        default:
            printf("Please try again.");
    }
}
    
    int sum(int num1,int num2){
        int answer;
        answer=num1+num2;
        return answer;
    }
    int diff(int num1,int num2){
        int answer;
        answer=num1-num2;
        return answer;
    }
    int mult(int num1,int num2){
        int answer;
        answer=num1*num2;
        return answer;
    }
    double quot(double num1,int num2){
        double answer;
        answer=num1/num2;
        return answer;
    }

该程序正常工作,没有将我的 main() 分解为几个较小的函数,但是在为每个操作、输入和菜单创建函数之后,我收到了错误的输出。我通过在使用 scanf 后打印 num1 和 num2 来解决这个问题,果然,我得到了错误的输出。

标签: cintegeroutputprintfscanf

解决方案


该函数getNumber更改其局部变量(参数)num1 和num2。退出函数后,这些局部变量不再存在。同名的全局变量保持不变。

您需要通过指向它们的指针通过引用来传递全局变量。例如

int getNumber(int *num1,int *num2){

    printf("Welcome to Simple Calculator!\n");
    printf("Please input a number to begin:\n");
    scanf("%d", num1);
    printf("Great! Now input the second number:\n");
    scanf("%d", num2);

}

该函数被称为

getNumber( &num1, &num2 );

请注意,不需要将变量 num1、num2 和choice 声明为全局变量。您应该在使用它们的范围内声明它们,例如在函数operation_menu中。

函数 quot 的两个参数也应该具有类型int。该函数可以定义为

double quot( int num1,int num2){
    double answer;
    answer = ( double )num1/num2;
    return answer;
}

推荐阅读