1. ホーム
  2. c

[解決済み】 error: too few arguments to function `printDay' (C言語)

2022-01-26 07:01:29

質問

質問

私はC言語のかなり初心者なのですが、コンパイル(GCC)しようとするとこんなエラーが出ます。

error: 関数 `printDay' への引数が少なすぎる。

私の疑問は

  1. どのような意味があるのですか?
  2. どうすれば直せますか?

P.S. これは私の完全なコードではなく、私が直面しているこのエラーだけです。 ありがとうございました。

コード

#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 again\n");
        input();
    }
    if (month == feb && day > 28)
    {
        printf("Invalid input, try again\n");
        input();
    }
    if (month == jan && day > 31)
    {
        printf("Invalid input, try again\n");
        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;
    }
}

解決方法は?

<ブロッククオート
  1. どういう意味ですか?

"です。 error: 関数 'printDay' への引数が少なすぎます。 に間違った数の引数を渡していることを意味します。 printDay をここで呼び出すと

printDay(input());

引数を1つ渡しているのに、その宣言は printDay は、3つの引数を取ることを示しています。

void printDay(int month, int day, int firstDay);

<ブロッククオート
  1. どうすれば直せますか?

正しい数の引数を渡すことで、修正することができます。

int month = ...;
int day = ...;
int firstDay = ...;
printDay(month, day, firstDay);