Математические функции в C - PullRequest
2 голосов
/ 28 июля 2011

Я использую Code :: blocks для компиляции моего первого файла с несколькими исходными текстами, который был изучен из "C Программирование на простых шагах" Майка МакГрата.К сожалению, у моих математических функций, похоже, проблемы.Вот заголовок, который содержит функции:

/* this header file contains utility functions */

int square(int x);       /* function prototypes */
int multiply(int x, int y);

int square(int x) 
{ 
return (x*x);
}

int multiply(int x, int y)
{
return (x*y);
}

Единственная функция, которая имеет проблему, это "square ()".Он считывает ввод «2» как «2293356» и выводит квадрат как «553755367» ... Какого черта?!?

Вот файл menu.c ... Есть menu.c, ops.c, calc.c и utils.h.Абаов это .h.MENU.c включают в себя

void menu();

void menu()
{

    int num;
    printf("\n\tEnter the number of an operation:\n");
    printf("\t1. Square a number\n");
    printf("\t2. Multiply two numbers\n");
    printf("\t3. Exit\n");
    scanf("%d", &num);
    switch(num)
    {
    case 1 : getnum(); break;
    case 2 : getnums(); break;
    case 3 : return;
    }
}

Вот ops.c ...

#include <stdio.h>
#include "utils.h"

void getnum();
void getnums();

void getnum()
{

    int num;
    printf("Enter an integer to be squared: ");
    scanf("%d", &num);
    printf("%d squared is %d\n, num, square(num)");
    menu();
}

void getnums()
{

    int num1, num2;
    printf("Enter two numbers to be multiplied, ");
    printf("seperated by a space: ");
    scanf("%d", &num1);
    scanf("%d", &num2);
    printf("%dx%d = %d\n", num1, num2, multiply(num1, num2));
    menu();

}

Это последняя часть программы, calc.c,

#include <stdio.h>
int main()
{
    menu();
    printf("end\n");
    return 0;
}

1 Ответ

3 голосов
/ 28 июля 2011

Квадрат 2293356 не вписывается в int и поэтому переполняется, что приводит к неопределенному поведению!Что касается того, почему он читает 2 как 2293356, не может быть дан ответ без дополнительного кода.

Обновление: И вот ваша реальная ошибка:

printf("%d squared is %d\n, num, square(num)");

должно быть

printf("%d squared is %d\n", num, square(num));

:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...