[英]Declaration and use of function in c
我在此代码中找不到错误。 我正在尝试编写一个程序,该程序根据日,月和年返回一年中的天数(例如:60)[例如:2000年3月3日(2000年3月3日)]。
编译器给我这些错误:
- 函数'day_of_year'的参数太少
- 'day_of_year'的类型冲突
#include <stdio.h>
int day_of_year(int day, int month, int year);
int main(){
int day, month, year, i, count=0;
int a[]={31,28,31,30,31,30,31,31,30,31,30,31};
printf ("Enter the day: ");
scanf ("%d", &day);
printf ("Enter the month: ");
scanf ("%d", &month);
printf ("Enter the year: ");
scanf ("%d", &year);
count=day_of_year();
printf ("Count: %d", count);
return 0;
}
int day_of_year (int day, int month, int year, int i, int count){
int a[]={31,28,31,30,31,30,31,31,30,31,30,31};
if (year%4==0) a[2]++;
count = day;
for (i=0;i<month;i++)
count+=a[i];
return count;
}
宣言:
int day_of_year(int day, int month, int year);
呼叫:
count=day_of_year();
定义:
int day_of_year (int day, int month, int year, int i, int count){
C是一种强类型语言,表示函数参数的数量和类型非常匹配。
因此,您需要更正参数列表并将缺少的参数添加到函数调用中。
看起来您实际上并不需要定义中的最后两个参数,而是将它们声明为局部变量:
int day_of_year (int day, int month, int year){
int i, count;
我发表了一些意见。
#include <stdio.h>
int day_of_year(int day, int month, int year);
int main(){
// you don't need to declare 'i' here, or a[]
int day, month, year,count;
printf ("\nEnter the day: ");
scanf ("%d", &day);
printf ("\nEnter the month: ");
scanf ("%d", &month);
printf ("\nEnter the year: ");
scanf ("%d", &year);
// you need to pass the parameters to the function
count=day_of_year(day,month,year);
printf ("\nCount: %d", count);
return 0;
}
// here you put in the function signature two more variables.
//they are not used and also they differ from the initial definition.
int day_of_year (int day, int month, int year){
int count=0,i=0;
int a[]={31,28,31,30,31,30,31,31,30,31,30,31};
if (year%4==0) a[1]++;
count = day;
for (i=0;i<month;i++)
count+=a[i];
return count;
}
谢谢大家。 我更正了错误。 这是新代码。
#include <stdio.h>
int day_of_year(int day, int month, int year);
int main(){
int day, month, year, i, count=0;
int a[]={31,28,31,30,31,30,31,31,30,31,30,31};
printf ("Enter the day: ");
scanf ("%d", &day);
printf ("Enter the month: ");
scanf ("%d", &month);
printf ("Enter the year: ");
scanf ("%d", &year);
count=day_of_year(day, month, year);
printf ("Count: %d", count);
return 0;
}
int day_of_year (int day, int month, int year){
int i, count;
int a[]={31,28,31,30,31,30,31,31,30,31,30,31};
if (year%4==0) a[2]++;
count = day;
for (i=0;i<month;i++)
count+=a[i];
return count;
}
您尚未将任何参数传递给函数day_of_year。
您的原始代码中有很多错误,但是编译的解决方案可以是这样的:
#include <stdio.h>
int day_of_year(int day, int month, int year);
int main(){
int day, month, year, count=0;
printf ("Enter the day: ");
scanf ("%d", &day);
printf ("Enter the month: ");
scanf ("%d", &month);
printf ("Enter the year: ");
scanf ("%d", &year);
count=day_of_year(day, month, year);
printf ("Count: %d", count);
return 0;
}
int day_of_year (int day, int month, int year){
int i = 0, count = 0; // declaration was missing
int a[]={31,28,31,30,31,30,31,31,30,31,30,31};
if (year%4==0) a[2]++;
count = day;
for (i=0;i<month;i++)
count+=a[i];
return count;
}
首先,您在代码的开头声明了day_of_year
函数,但是在实现它时,您将使用其他禁止使用的参数。
您应该在函数体内声明count
和i
,以便将它们从函数的参数列表中移出。
其次,当您main
调用day_of_year
时,尽管您从控制台读取了它们,但是您什么也没传递。
除此之外,确定输入年份是否为a年的逻辑不是理想的解决方案,但我让您自己纠正。
希望能帮助到你。
除了原型%定义不匹配之外,您也没有将任何参数传递给该函数。
您几乎没有一对一的错误。 C中的索引从0开始。
这是修改后的版本。 请密切注意day_of_year
函数的更改。 特别是,对于2月,您想增加a[1]
(而不是a[2]
)。 同样, for
循环的条件必须为month - 1
(而不是month
)。
#include <stdio.h>
int day_of_year(int day, int month, int year);
int main(){
int day, month, year, i, count=0;
int a[]={31,28,31,30,31,30,31,31,30,31,30,31};
printf ("Enter the day: ");
scanf ("%d", &day);
printf ("Enter the month: ");
scanf ("%d", &month);
printf ("Enter the year: ");
scanf ("%d", &year);
count=day_of_year(day, month, year);
printf ("Count: %d", count);
return 0;
}
int day_of_year (int day, int month, int year)
{
int a[]={31,28,31,30,31,30,31,31,30,31,30,31};
int count = day, i;
if (year%4==0) a[1]++;
for (i=0;i<month - 1;i++)
count+=a[i];
return count;
}
编译器由于以下内联原因而给出错误:
°函数'day_of_year'的参数太少
原因:调用了不带参数的day_of_year()函数。
°与“ day_of_year”的类型冲突
原因: day_of_year()
函数的原型与day_of_year()
定义不同。 原型对编译器说,它带有3个参数而函数定义具有5个参数。 这种不匹配会导致错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.