我开始学习如何在c中使用函数,我试图创建一个函数来划分整数,但编译器给了我一个错误。我搜索了谷歌,它引导我到这里经常问的问题,但我不明白错误究竟是什么。所以,我正在重新发布它。
请注意,根据编译器的问题是“z not”div“。
以下是代码:
#include<stdio.h>
float div(int x, int z);
void main()
{
int n,m;
float div;
printf("Enter first number: \n");
scanf("%d",&n);
printf("Enter second number: \n");
scanf("%d",m);
if(m!=0)
{
div=div(n,m);
printf("%d/%d=%f \n",n,m,div);
}
}
float div(int x, int z)
{
int x,z;
float div;
if(z!=0){
div=x/z;
return div;
}
}
答案 0 :(得分:3)
你做错了一些事:
(从BLUEPIXY的评论中,你应该避免使用名称div,因为一些标准库使用它)
#include <stdio.h>
/*Prototypes*/
float divve(int x, int z);
//^^^^^ Changed name of the function since you have a float variable with the same name in main
int main() {
//^ Default return type of main is int
int n, m;
float div;
printf("Enter first number: \n");
scanf("%d",&n);
printf("Enter second number: \n");
scanf("%d", &m);
//^ You forgot the address operator here
if(m != 0) {
div = divve(n, m);
printf("%d/%d=%f \n", n, m, div);
}
return 0;
//^^^^^^^^^ Return to end the program nicely
}
float divve(int x, int z) {
//Removed second declaration of x and z
float div;
if(z != 0){
//^ Changed y to z since you don't have a y variable in the function | BTW Also you already checked if m is != 0 in the main function
div = (float)x / (float)z;
return div;
}
return 0;
//^^^^^^^^^ return something if the if statement fails
}
答案 1 :(得分:1)
问题在于:
float div(int x, int z)
{ // ^
int x,z; // << Two 'z's
float div;
if(y!=0){
div=((float)x) / z; // Add a cast to avoid integer division
return div;
}
return 0;
}
z
范围内已有div
,因此第二个声明(局部变量)与第一个声明(函数的形式参数)冲突。
请注意,我为return
为零时的情况添加了y
语句。当控制到达非void函数的末尾时,这将避免未定义的行为。
另请注意,避免使用相同的标识符命名变量和函数是个好主意,因此最好在div
中重命名main
变量。
答案 2 :(得分:1)
您正在声明与函数div
中的函数参数同名的变量。
但是还有更多的问题,按照出现顺序列举它们
您将函数命名为div()
,然后在main()
中声明了一个具有相同名称的变量,以存储函数的返回值。
您的第二个scanf()
缺少&
,我认为这是一个错字。
您在x
函数中声明了z
和div()
,它们是函数参数的名称,然后您测试的是y == 0
在任何地方宣布。
您划分整数,如果z > x
为0
,则会截断结果。
退出div()
函数,如果z == 0
没有返回任何值,您可能会返回0
或任何有意义的值,表明无法执行操作
我修复了你的代码,这里是
float divide(int x, int z);
int main()
{
int n, m;
float quotient;
printf("Enter first number: \n");
scanf("%d", &n);
printf("Enter second number: \n");
scanf("%d", &m);
if (m != 0)
{
quotient = divide(n,m);
printf("%d/%d = %f \n", n, m, quotient);
}
}
float divide(int x, int z)
{
float result;
if (z != 0) {
result = (float)x / (float)z;
return result;
}
return 0;
}
您应该为变量赋予有意义的名称,这样可以提高可读性并完全避免这种问题。
了解我如何将div()
函数重命名为更具表现力的名称divide()
,以及其中的返回值&#34;这不是严格需要的&#34; ,我将其命名为result
以反映计算结果将包含在其中,并在main()
中divide()
a的返回值称为qoutient
也让读者期待它可能来自哪里,而不会看到你分配给它的行。