C: Float в аргументе, тип возврата либо дает пробел, либо ошибку - PullRequest
0 голосов
/ 26 сентября 2019

Я помогал юношам с программированием на Си, чего я не делал более 4-5 лет, и я забыл немало синтаксисов.Вставка ниже кода

#include <stdio.h>
#include <conio.h>


######## Example 1 ########

divide(float x,float y)
{ 
    return (x/y);
}

void main()
{
int z;
z=divide(10.0,2.0);
printf("%d",z);

main.c:15:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
 divide(float x,float y)
 ^~~~~~
main.c: In function ‘main’:
main.c:24:1: error: expected declaration or statement at end of input
 printf("%d",z);
 ^~~~~~

Когда я пытаюсь ввести явный тип возврата в виде числа с плавающей запятой в ответ (x / y)

######## Example 2 ########


divide(float x,float y)
{ 
    return (float)(x/y);
}

void main()
{
int z;
z=divide(10.0,2.0);
printf("%d",z);

}
main.c:15:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
 divide(float x,float y)
 ^~~~~~
main.c: In function ‘main’:
main.c:24:1: error: expected declaration or statement at end of input
 printf("%d",z);
 ^~~~~~
######## Example 3 ########

divide(float x,float y)
{ 
    return (float) (x/y);
}

void main()
{
divide(10.0,2.0);

}
main.c:15:1: warning: return type defaults to ‘int’ [-Wimplicit-int]                                                                  


Program finished with exit code 5                                                                                                  
Press ENTER to exit console.       


The last code run returned a blank. I'm guessing it's returning a garbage value.
Can somebody please help me out with this?

https://www.onlinegdb.com/online_c++_compiler# Я использовал вышеуказанный веб-сайт для запуска своего кода, если компилятор чем-нибудь поможет.Спасибо!

Ответы [ 2 ]

2 голосов
/ 26 сентября 2019

Вы не указываете тип возвращаемого значения для функцииdiv (), поэтому по умолчанию используется тип возвращаемого значения типа int.Измените его на:

float divide(float x,float y)

Также вы хотите использовать printf (), а не print (), и вы в настоящее время присваиваете возвращаемое значение для типа int.Вы захотите присвоить его float и исправить строку формата printf.

float divide(float x,float y)
{ 
    return (float)(x/y);
}

void main()
{
    float z;   // You want z to be a float
    z=divide(10.0,2.0);
    printf("%f",z);  // Changed format to %f for float
}   
1 голос
/ 26 сентября 2019

Я вижу три ошибки, во-первых, вам нужно указать возвращаемое значение функции деления float divide (float x, float y){ //function content}.

Во-вторых, поскольку тип возврата вашей функции деления - это число с плавающей запятой, измените int z; на float z;, затем перейдите к z=divide(10.0,2.0);

В-третьих, %d для целых чисел, в то время как %f используется для чисел с плавающей запятой.Следовательно, вместо printf("%d", z); вы должны использовать printf("%f", z);

Наконец, у меня есть предложение.В общем, если вы можете избежать деления поплавков, пожалуйста, просто из-за ошибки переполнения, которая может возникнуть из-за этого.Для целей этого примера это хорошо, потому что поплавки маленькие, но они становятся опасными по мере увеличения данных.Это один из лучших ответов о том, как числа с плавающей запятой хранятся в памяти Как числа с плавающей запятой хранятся в памяти?

Надеюсь, это поможет!

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