Question
I’m fairly new to C and I’ve got this error when I try to compile it (GCC):
error: too few arguments to function `printDay’
My questions are:
- What does it mean?
- How do I fix this?
P.S this is not my full code, it’s just this error I’m faced with.
Thanks in advance.
Code
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <time.h>
#define MAX_DAYS 31
#define MIN_DAYS 1
#define MAX_MONTHS 12
#define MIN_MONTHS 1
enum monthsOfYear
{
jan = 1,
feb,
mar,
apr,
may,
jun,
jul,
aug,
sep,
oct,
nov,
dec
};
enum daysOfWeek
{
sun = 1,
mon,
tue,
wed,
thu,
fri,
sat
};
int input();
void check(int month, int day);
void printDay(int month, int day, int firstDay);
int main()
{
printf("Hello! Welcome to the day calculator!n");
printDay(input());
return (0);
}
/*this function takes the input from the user
input: none
output: the first day
*/
int input()
{
enum daysOfWeek day = 0;
enum monthsOfYear month = 0;
int firstDay = 0;
printf("Enter month to check: (1-jan, 2-feb, etc) ");
scanf("%d", &month);
printf("Enter day to check: ");
scanf("%d", &day);
check(month,day);
printf("Enter the weekday of the 1st of the month: (1-Sunday, 2-Monday, etc) ");
scanf("%d", &firstDay);
return firstDay;
}
/*
this function checks the validity of the input
input: day, month
output: none
*/
void check(int month, int day)
{
if(month > MAX_MONTHS || month < MIN_MONTHS && day > MAX_DAYS || day < MIN_DAYS)
{
printf("Invalid input, try againn");
input();
}
if (month == feb && day > 28)
{
printf("Invalid input, try againn");
input();
}
if (month == jan && day > 31)
{
printf("Invalid input, try againn");
input();
}
}
void printDay(int month, int day, int firstDay)
{
int date = 0;
date = day - firstDay;
switch(day)
{
case sun:
printf("%d.%d will be a Sunday", day, month);
break;
default:
break;
}
}
Home »
C programming language
In this article, we are going to learn about an error which occurs in C programming language when we use less argument while calling a function. If we do this compiler will generate an error «Too few arguments to function».
Submitted by IncludeHelp, on May 15, 2018
Too few arguments to function in C language
This error occurs when numbers of actual and formal arguments are different in the program.
Let’s understand first, what actual and formal arguments are?
Actual arguments are the variables, values which are being passed while calling a function and formal arguments are the temporary variables which we declare while defining a function.
Consider the given example:
int sum(int a, int b, int c) { return (a+b+c); } int main() { int x,y,z; x = 10; y = 20; z = 30; printf("sum = %dn",sum(x, y, z)); return 0; }
Here, actual arguments are x, y and z. Formal arguments are a, b and c.
When, the error «too few arguments to function is occurred»?
Remember: Number of actual arguments (the arguments which are going to be supplied while calling the function) must equal to number of formal arguments (the arguments which are declared while defining a function).
This error will occur if the number of actual and formal arguments is different.
Consider the above example, and match with these below given calling statements, these statements will generate errors:
printf("sum = %dn", sum(x, y)); printf("sum = %dn", sum(x)); printf("sum = %dn", sum(10, 20));
Example: (by calling functions with less number of arguments)
#include <stdio.h> int sum(int a, int b, int c) { return (a+b+c); } int main() { int x,y,z; x = 10; y = 20; z = 30; printf("sum = %dn", sum(x, y)); printf("sum = %dn", sum(x)); printf("sum = %dn", sum(10, 20)); return 0; }
Output
prog.c: In function ‘main’: prog.c:12:23: error: too few arguments to function ‘sum’ printf("sum = %dn", sum(x, y)); ^~~ prog.c:3:5: note: declared here int sum(int a, int b, int c) ^~~ prog.c:13:23: error: too few arguments to function ‘sum’ printf("sum = %dn", sum(x)); ^~~ prog.c:3:5: note: declared here int sum(int a, int b, int c) ^~~ prog.c:14:23: error: too few arguments to function ‘sum’ printf("sum = %dn", sum(10, 20)); ^~~ prog.c:3:5: note: declared here int sum(int a, int b, int c) ^~~ prog.c:9:10: warning: variable ‘z’ set but not used [-Wunused-but-set-variable] int x,y,z; ^
So, while calling a function, you must check the total number of arguments. So that you can save your time by this type of errors.
Example: (by calling functions with correct number of arguments)
#include <stdio.h> int sum(int a, int b, int c) { return (a+b+c); } int main() { int x,y,z; x = 10; y = 20; z = 30; printf("sum = %dn", sum(x, y, z)); printf("sum = %dn", sum(x,y,z)); printf("sum = %dn", sum(10, 20,30)); return 0; }
Output
sum = 60 sum = 60 sum = 60
Generally, when you get this error your controller is likely expecting more arguments than you are passing to it.
However, if you got the above error after updating to PHP 8 then it’s likely an issue with PHP 8s expected parameter arrangement.
👉 Parameter arrangement in PHP 8
In PHP 8, all required parameters need to be in the first position of the method/function signature followed by optional parameters.
01: function person($name, $age=null) {
02: echo $name;
03: }
04:
05: person('eddymens');
If you happen to place optional parameters before required ones, PHP 8 will throw a deprecation error, which in itself is not a show-stopper.
01: function person($age=null, $name) {
02: echo $name;
03: }
04:
05: person('eddymens', 25);
Deprecated: Required parameter $name follows optional parameter $age in /tmp/dxhracul7n453yt/tester.php on line 3 25
👉 Parameter placement error in Laravel
In Laravel however, you might end up with an ArgumentCountError:
error instead of a deprecation message.
The deprecation error is only thrown when you call on the function directly, when you use a function like call_user_func()
to call on your function you end up with the ArgumentCountError:
error, and laravel relies a lot on such functions to call on different parts of your code.
And this is why you end up with an error that doesn’t clearly state the problem.
👉 Fixing the error
Laravel controllers typically have the $request argument passed in as a required parameter which is then resolved using a dependency container.
You are likely to hit the ArgumentCountError:
if you do not have the $request argument as the first argument if you have optional parameters.
01: public function index($slug = null, $tag = null, Request $request) {
02: ...
03: }
04: ...
To fix this place the $request variable as the first parameter of the method and this should fix it.
01: public function index( Request $request, $slug = null, $tag = null) {
02: ...
03: }
04:
Here is another article you might like 😊 «Laravel: Create Controllers In A Subfolder (Sub Controller)»
3 / 3 / 0 Регистрация: 19.10.2008 Сообщений: 31 |
|
1 |
|
02.03.2009, 17:04. Показов 56313. Ответов 9
Здравствуйте! Код #include <iostream> #include <string> using namespace std; void func (double cena, double procent, double sum, double procentrub, double procsum) //Функция подсчёта и вывода информации { for (int cntr = 1; cena != 0; cntr++) { cout << "nВведите цену " << cntr << "-го товара: "; cin >> cena; if (cena != 0) { cout << "Введите скидку " << cntr << "-го товара: "; cin >> procent; procentrub = (cena / 100) * procent; // Скидка в рублях procsum += procentrub; sum = sum + (cena - procentrub); } // Цена товара со скидкой else { cout << "nИтоговая цена: " << sum << endl; } } } int main (int argc, char *argv[]) { func(); } Вываливается с ошибкой Too few arguments to function ‘void func(double, double, double, double, double)’
1 |
176 / 168 / 27 Регистрация: 12.01.2009 Сообщений: 430 |
|
02.03.2009, 17:12 |
2 |
Можно много.Ты же не одного не передаешь.
1 |
Почетный модератор 7390 / 2636 / 281 Регистрация: 29.07.2006 Сообщений: 13,696 |
|
02.03.2009, 17:13 |
3 |
func у тебя параметры принимает, а ты ее как вызываешь, видел?
1 |
Lord_Voodoo Супер-модератор 8783 / 2536 / 144 Регистрация: 07.03.2007 Сообщений: 11,873 |
||||
02.03.2009, 17:13 |
4 |
|||
ну вообще все правильно вам пишут, и на аргументы вас никто не ограничивает, только у меня вопрос:
, где параметры вообще? или вы рассчитываете, что компилятор сам додумается что-то в функцию передать? Vourhey, Humanitis, так это вижу не я один… ну повезло… а то думал — переработался)))
1 |
L@m@kЪ 3 / 3 / 0 Регистрация: 19.10.2008 Сообщений: 31 |
||||
02.03.2009, 17:23 [ТС] |
5 |
|||
func у тебя параметры принимает, а ты ее как вызываешь, видел? Глубоко сожалею о своей тупости и безграмотности, а также о лени поискать в словаре Добавлено через 1 минуту 53 секунды
ну вообще все правильно вам пишут, и на аргументы вас никто не ограничивает, только у меня вопрос:
, где параметры вообще? или вы рассчитываете, что компилятор сам додумается что-то в функцию передать? Vourhey, Humanitis, так это вижу не я один… ну повезло… а то думал — переработался))) Большое спасибо, ошибка исчезла. Но появилась другая: в строке 21 Код avonfunc.cpp: In function ‘int main(int, char**)’: avonfunc.cpp:21: ошибка: expected primary-expression before ‘double’ avonfunc.cpp:21: ошибка: expected primary-expression before ‘double’ avonfunc.cpp:21: ошибка: expected primary-expression before ‘double’ avonfunc.cpp:21: ошибка: expected primary-expression before ‘double’ avonfunc.cpp:21: ошибка: expected primary-expression before ‘double’
0 |
Супер-модератор 8783 / 2536 / 144 Регистрация: 07.03.2007 Сообщений: 11,873 |
|
02.03.2009, 17:31 |
6 |
L@m@kЪ, покажи снова код
1 |
L@m@kЪ 3 / 3 / 0 Регистрация: 19.10.2008 Сообщений: 31 |
||||
02.03.2009, 17:41 [ТС] |
7 |
|||
0 |
Humanitis 176 / 168 / 27 Регистрация: 12.01.2009 Сообщений: 430 |
||||
02.03.2009, 17:42 |
8 |
|||
оригинальноСначала надо объявить переменные ,а потом их передавать в функцию. А ты их объявляешь в теле вызова функции
1 |
Супер-модератор 8783 / 2536 / 144 Регистрация: 07.03.2007 Сообщений: 11,873 |
|
02.03.2009, 17:44 |
9 |
вы бы хоть одну книгу прочитали что ли, для начала… Код { [COLOR=black]double cena, double procent, double sum, double procentrub, double procsum;[/COLOR] ... // ввод данных func (cena, procent, sum, procentrub, procsum); }
1 |
3 / 3 / 0 Регистрация: 19.10.2008 Сообщений: 31 |
|
02.03.2009, 17:48 [ТС] |
10 |
вы бы хоть одну книгу прочитали что ли, для начала… Код { [COLOR=black]double cena, double procent, double sum, double procentrub, double procsum;[/COLOR] ... // ввод данных func (cena, procent, sum, procentrub, procsum); } Нда, действительно что-то туплю сегодня. Всем спасибо, всё работает
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
02.03.2009, 17:48 |
10 |
I run the C program and I get the following errors.
4:20: error: too few arguments to function call, at least argument ‘format’ must be specified int x= get_int();
/usr/include/cs50.h:82:1: note: ‘get_int’ declared here int get_int(const char *format, …)__attribute__((format(printf, 1, 2)));
7:20: error: too few arguments to function call, at least argument ‘format’ must be specified
int x= get_int();
/usr/include/cs50.h:82:1: note: ‘get_int’ declared here int get_int(const char *format, …) attribute((format(printf, 1, 2)));
Here’s the code
#include <cs50.h>
int main(void){
int x= get_int();
switch(x)
{
int x= get_int();
case1:
printf("One!n");
break;
case2:
printf("Two!n");
break;
case3:
printf("Three!n");
break;
default:
printf("Sorry!n");
}
}
I’m aware the CS50 manual says about get_string:
#include <cs50.h>
char *get_string (const char *format, ...);
But, I’m still not sure if this information helps in my example.