Pomoc przy zadaniu domowym – nie mogę wywołać funkcji

0

Gdy próbuje wywołać funkcje "przystepnośc" nie chce się skompilować z takim o to komunikatem:

error: too few arguments to function

Nie do końca potrafię przekazywać zmiennych do funkcji zrobiłem to za pomocą wskaźnika może w tym miejscu jest błąd bo wcześniej tez miałem z tym problem. Z góry dziękuje za pomoc i pozdrawiam.

#include <iostream>
#include<stdio.h>
using namespace std;
int przystepnosc(short *wsk_data1){
     bool przystepny =false;
    if(*wsk_data1%4==0&&*wsk_data1%100!=0||*wsk_data1%400==0){
       cout << "Rok jest przestepny" <<endl;
       przystepny=true;
   }
   else
    cout<< "Nie jest przestepny";



}

int main()
{
    struct data {
    short d;
    short m;
    short r;
    }data1;
    cout << "Podaj dzien: "<<endl;
    cin >> data1.d;
    cout << "Podaj miesiac: "<<endl;
    cin >> data1.m;
    cout << "Podaj rok: "<<endl;
    cin >> data1.r;
    short *wsk_data1=&data1.r;
    przystepnosc(short *wsk_data1); // W tym miejscu
    cout << data1.d<<" ";
	switch (data1.m){
		case 1:
			cout << " Styczenia ";
			break;
		case 2:
			cout << " Lutego ";
			break;
		case 3:
			cout << " Marca ";
			break;
		case 4:
			cout << " Kwietnia ";
			break;
		case 5:
			cout << " Maja ";
			break;
		case 6:
		    cout << " Czerwiec ";
			break;
		case 7:
			cout << " Lipica ";
			break;
		case 8:
			cout << " Sierpienia ";
			break;
		case 9:
			cout << " Wrzesienia ";
			break;
		case 10:
		    cout << " Pazdziernika ";
			break;
		case 11:
			cout << " Listopada ";
			break;
		case 12:
			cout << " Grudnia ";
			break;
		default:
			cout << " Nie ma takiego miesiaca.";
	}
	cout << data1.r<<endl;
getchar();getchar();
    return 0;
}

5
przystepnosc(short *wsk_data1); // W tym miejscu

tak się nie wywołuje funkcji. Po co ten typ? I czemu dereferencja?

przystepnosc(wsk_data1);

Przy okazji, nazwy masz bardzo nicniemówiące. Co to jest data1? Co to jest przystępność?

3
  1. Lata mogą być przestępne, nie przystępne.
  2. Z jakiego powodu przekazujesz argument jako wskaźnik, gdy wartoś wystarczyłaby?
  3. Funkcja nazywa się int przystepne(short* wsk_data), ale nic nie zwracasz. Może jednak powinna zwracać wartość logiczną, i dopiero w zależności od tego co zwróci powinno się wyświetlać komunikat.
  4. To co nazywasz wsk_data jest tak naprawdę wskaźnikiem tylko na rok, a nie całe struct data, dlatego nazwa nie jest adekwatna.
0
#include <iostream>
#include<stdio.h>
#include<limits>
using namespace std;
int przystepnosc(short *wsk_data1R){
    if(*wsk_data1R%4==0&&*wsk_data1R%100!=0||*wsk_data1R%400==0){
       cout << "Rok przestepny" <<endl;
   }
   else
    cout<< "Nie jest rokiem przestepnym";
    return 0;

}

int main()
{
    bool czyBlad1;
    bool czyBlad2;
    bool czyBlad3;
    struct data {
    short d;
    short m;
    short r;
    }data1;

   do{
    cout << "Podaj dzien: "<<endl;
    cin >> data1.d;
    cin.fail();
    czyBlad1=cin.fail();
    cin.clear();
    cin.ignore(numeric_limits<streamsize>::max(),'\n');
   }while(czyBlad1==1);

   do{
    cout << "Podaj miesiac: "<<endl;
    cin >> data1.m;
    czyBlad2=cin.fail();
    cin.clear();
    cin.ignore(numeric_limits<streamsize>::max(),'\n');
   }while(czyBlad2==true);

    do{
    cout << "Podaj rok: "<<endl;
    cin >> data1.r;
    czyBlad3=cin.fail();
    cin.clear();
    cin.ignore(numeric_limits<streamsize>::max(),'\n');
    }while(czyBlad3==true);
    
   cout << data1.d<<" ";

   short *wsk_data1R=&data1.r;
	switch (data1.m){
		case 1:
			cout << " Styczenia ";
			break;
		case 2:
			cout << " Lutego ";
			break;
		case 3:
			cout << " Marca ";
			break;
		case 4:
			cout << " Kwietnia ";
			break;
		case 5:
			cout << " Maja ";
			break;
		case 6:
		    cout << " Czerwiec ";
			break;
		case 7:
			cout << " Lipica ";
			break;
		case 8:
			cout << " Sierpienia ";
			break;
		case 9:
			cout << " Wrzesienia ";
			break;
		case 10:
		    cout << " Pazdziernika ";
			break;
		case 11:
			cout << " Listopada ";
			break;
		case 12:
			cout << " Grudnia ";
			break;
		default:
			cout << " Nie ma takiego miesiaca.";
	}
	cout << data1.r<<endl;
	 przystepnosc(wsk_data1R);
getchar();getchar();
    return 0;
}

To działa!! :D
enedil odpowiadając na twoja sugestię z punktu 3 tak miało być w założeniu ale nie do końca potrafię przekazać zmienną boolean "przystepny" czy tam "przystępne" do funkcji main w funkcji przystępność działa poprawnie ale już w main zmienia mi wartość i drukuje kompletnie. Bardzo dziękuję za wszelką pomoc i uwagi ;)
I mam jeszcze jedno pytanie gdy tworze pętle do while wychodzi mi że zmienna czyBlad nie jest w tym blok kodu. Nie mam po prostu do niej dostępu bo jest w innym bloku kodu jak zrobić żeby działało to bez zmiennych globalnych?

1 użytkowników online, w tym zalogowanych: 0, gości: 1