kalender in c

Status
Niet open voor verdere reacties.

Erikve

Gebruiker
Lid geworden
5 mei 2004
Berichten
15
voor het vak programmeren moet ik een opdracht maken van een altijdlopende kalender. Deze moet bij een ingegeven datum vervolgens de dag kunnen noemen. Ik ben een heel eind gekomen met het maken van deze structuur, maar hij blijft in 4 regels steken op dezelfde fout:
Quote:
numeric constant contains digits beyond the radix

(in regels 36, 37, 68 en 69, deze geef ik in de structuur dik aan)

kan iemand eens kijken of ie ziet waar de fout zich bevind:

#include <stdio.h>
#include <math.h>

int main ()
{
/* Definieer input variabelen */
int dag, maand, jaar, djaar, dagen, x, y, z;

/* Vragen om de datum */
printf("Geef een datum, dd-mm-jjjj, (vanaf 01-01-1900) waarvan u de dag wilt weten:\n");

/* Uitlezen van de datum */
scanf ("%i-%i-%i", &dag, &maand, &jaar);

/* Ijkdatum 01-01-1900 is op een maandag*/

/* Controleren of het een schrikkeljaar is */

if(jaar%4==0) {z=0;} /* als z=0 dan is het jaar een schrikkeljaar*/

/* aantal voorgaande schrikkeljaren (=x) berekenen*/

djaar = jaar-1900;

if(z==0)
{
x=(djaar/4)-1;

if(maand==1) {dagen=0;}
if(maand==2) {dagen=29;}
if(maand==3) {dagen=60;}
if(maand==4) {dagen=90;}
if(maand==5) {dagen=121;}
if(maand==6) {dagen=151;}
if(maand==7) {dagen=182;}
if(maand==8) {dagen=213;}
if(maand==9) {dagen=243;}

if(maand==10) {dagen=274;}
if(maand==11) {dagen=304;}
if(maand==12) {dagen=335;}

dagen = dagen + dag;

y = x * 366 + (jaar - x - 1900)* 365;

y=y+dagen; /* aantal dagen */

if(y%7==0) {printf("dit is een maandag/n");}
if(y%7==1) {printf("dit is een dinsdag/n");}
if(y%7==2) {printf("dit is een woensdag/n");}
if(y%7==3) {printf("dit is een donderdag/n");}
if(y%7==4) {printf("dit is een vrijdag/n");}
if(y%7==5) {printf("dit is een zaterdag/n");}
if(y%7==6) {printf("dit is een zondag/n");}

}
else {
x=(djaar/4);


if(maand==1) dagen=0;
if(maand==2) dagen=28;
if(maand==3) dagen=59;
if(maand==4) dagen=89;
if(maand==5) dagen=120;
if(maand==6) dagen=150;
if(maand==7) dagen=181;
if(maand==8) dagen=212;
if(maand==9) dagen=242;

if(maand==10) dagen=273;
if(maand==11) dagen=303;
if(maand==12) dagen=334;

dagen = dagen + dag;

y = x * 366 + (jaar - x - 1900)* 365;

y=y+dagen; /* aantal dagen */

if(y%7==0) {printf("dit is een maandag/n");}
if(y%7==1) {printf("dit is een dinsdag/n");}
if(y%7==2) {printf("dit is een woensdag/n");}
if(y%7==3) {printf("dit is een donderdag/n");}
if(y%7==4) {printf("dit is een vrijdag/n");}
if(y%7==5) {printf("dit is een zaterdag/n");}
if(y%7==6) {printf("dit is een zondag/n");}

}

return(0);
}
 
Het is zo lang geleden dat ik met C deed, ik vrees dat ik je misschien niet helemaal kan helpen.

Zou je even willen proberen achter de onderste accolade een puntkomma te plaatsen?

Verder zie ik geen eigenaardigheden in de code.

Dennis.

PS: Zo'n eeuwige kalender had ik indertijd ook moeten maken voor een opdracht.
 
Laatst bewerkt:
Ik weet dat niet zo zeker meer, maar het is een block die bij Main() hoort. Bij een If statement bijvoorbeeld behoeft men zo'n puntkomma niet te plaatsten, vandaar dat ik meer in de richting bij het gebruik van die puntkomma's zat te denken.

Dennis.

PS: Ik zal verder kijken in ieder geval.
 
Laatst bewerkt:
Sorry, maar C moet ik nog gaan installeren. Heb op dit moment alleen Visual C++ van MS en niet van Borland o.i.d.

Natuurlijk is het installeren van C++ voor zo'n betrekkelijk korte code niet echt noodzakelijk, maar ik doe het toch maar even voor het gemak.

Dennis.

PS. Ik moet tussentijds even iets anders doen thuis.
 
Ik heb C++ nog niet geïnstalleerd, ga het straks wel doen.

Probeer onderstaande even:

scanf ("%i"-"%i"-"%i", &dag, &maand, &jaar);

Dennis.
 
gedaan, heeft geen effect
lijkt me eerlijk gezegd ook niet dat de foutmelding hierop wijst, maar eerder naar de gegeven regels (of niet?)
 
Het is weldegelijk dat de foutmelding naar de invoer verwijst. Datgene wat je invoert is een string en deze string wordt geacht als integer zijnde(dus geen string, maar numeriek; een getal dus) te moeten zijn. Zelfs de Enter die je geeft na de invoer wordt in die string opgenomen als een string.

Het is nu om ervoor te zorgen, dat de gelezen string met scanf ook als een getal(met weglating van '-') wordt beschouwd.

Mijn C kennis is op dit moment niet meer zo paraat.

Dennis.
 
Probeer anders even zo om te testen:

scanf ("%d", &dag);
scanf ("%d", &maand);
scanf ("%d", &jaar);

Maar dan gaat de notatie dd-mm-jjjj (zonder het streepje) niet meer op. En daarbij moet je nu 3 keer afzonderlijk gaan invoeren voor de dag, de maand en het jaar.

Dennis.

PS: Ik weet dat de door jou vermelde notatie conform de opdracht is, maar wil je dan even die van mij proberen?

Dennis.

PS. Ik heb Visual C++, maar ik prefereer dat niet zo. Ik heb met de wat oudere C van Borland gewerkt en dat ging via de Dos prompt. Ik moet dat nog gaan zoeken thuis. Anders probeer ik straks een kale versie te downloaden.
 
Laatst bewerkt:
jammer genoeg werkt ook dat niet :(
toch alvast bedankt voor de moeite!:thumb:
 
Geplaatst door Erikve
jammer genoeg werkt ook dat niet :(
toch alvast bedankt voor de moeite!:thumb:
Ik schaam me zo :o

Werkt het ook niet met een i in plaats van d.

Dus, scanf ("%i", &dag);

Enzovoort.

Dennis.
 
Er zit ergens toch nog een fout in de berekening.

Dat is niet erg slim van mij, goed dat je dat zelf gezien hebt. Inderdaad wordt een newline met een backward-slash voorafgegaan en niet met een forward-slash.

Evenwel vind ik het nog steeds vreemd, waarom de fout bij de regels 36, 37, 68 en 69 aangegeven werd. Die regels bevatten helemaal geen newlines(\n).

Na aanpassing heb ik je progje gerund en er werd door de compiler inderdaad geen enkel foutmelding meer gegenereed, qua syntax werkt het dus goed. Er zit echter nog een fout in de berekening, misschien zit de fout wel bij de berekening v.d. schrikkeljaren, de aangeven dag is namelijk niet bij elke gegeven datum correct.
Ik heb er verder nog niet naar gekeken waar de fout precies zit.

Dennis.

PS. Ik heb je progje onder Linux gerund. C zit namelijk standaard in.
 
Laatst bewerkt:
er zat idd ook een fout in de bereken9ing aangezien 1900 geen schrikkeljaatr is, maar dat is nu ook opgelost

edit: ik run het standaar ond unix, dat bij ons op de uni standaard wordt gebruikt
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan