Archief - C++ vraagje over array opvullen + afdrukken!

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

MetalG

Legacy Member
Hallo!

ik heb waarschijnlijk mijn code verkeerd geschikt.
waardoor ik iets niet kan doorsturen.

de bedoeling is dus dat ik moet kunnen inloggen --> dat lukt.
als dat lukt --> menu afdrukken
--- tot hier werkte alles :P

scores ingeven, daarna scores afdrukken een lijntje tot waar de scores gaan zo ..

maar ik krijg dus cannot convert void to int --> die scores dus ! :(
kan iemand me ff helpen?

Met vriendelijke groeten,
Jordy

Code:
#define MAX 50
typedef char string[MAX];


void scores()
{
	int teller;
	int scores[MAX];

	for(teller=0;teller<2;teller++)
	{
		printf("%d score",scores);
		scanf("%d",scores[teller]);
	}

}

void grafiek(int scores[MAX])
{
	int getal1;
	int getal2;
	int teller;

	getal1 = scores[1];
	getal2 = scores[2];

	for(teller=0;teller<getal1;teller++)
		printf("D");

	printf("\n");

	for(teller=0;teller<getal2;teller++)
		printf("D");

}
void drukmenu()
{
	int keuze;
	printf("\n\n 1:\t voer twee scores in");
	printf("\n\n 2:\t maak een grafiek met de ingevoerde scores");
	
	while(keuze!=99)
	{
		switch(keuze){
			case 1: scores(); break;
			case 2: grafiek(scores); break;
			}
	}

	printf("geef uw keuze \n");
	scanf("%d",&keuze);

}

void main()
{
	string lijstnamen[MAX]={"jordy","dries","elien","lisa","kenny"};
	string lijstwachtwoorden[MAX]={"1","2","3","4","5"};

	string naam;
	int teller;
	bool gevonden=false;
	int plaats;
	string wachtwoord;

	printf("Geef uw naam a.u.b \n");
	scanf("%s",naam);
	printf("wachtwoord nu a.u.b \n");
	scanf("%s",wachtwoord);

	for(teller=0;teller<MAX;teller++)
	{
		if(strcmp(naam,lijstnamen[teller])==0 && strcmp(wachtwoord,lijstwachtwoorden[teller])==0)
		{
			plaats = teller;
			gevonden = true;
					}
	}
	if(gevonden==false)
		printf("uw gebruikersnaam en/of wachtwoord is onjuist\n");
	else
		printf("Welkom,%s\n",lijstnamen[plaats]);
		drukmenu();
}

MetalG

Legacy Member
kheb het even gefilterd!

Code:
 void scores()
{
	int teller;
	int scores[2];

	for(teller=0;teller<2;teller++)
	{
		printf("%d score",scores);
		scanf("%d",scores[teller]);
	}

}

void grafiek(int scores[2])
{
	int getal1;
	int getal2;
	int teller;

	getal1 = scores[1];
	getal2 = scores[2];

	for(teller=0;teller<getal1;teller++)
		printf("D");

	printf("\n");

	for(teller=0;teller<getal2;teller++)
		printf("D");

}
void main()
{
	int keuze;

	printf("geef uw keuze");
	scanf("%d",&keuze);

	while(keuze!=99){
		switch(keuze)
		{
		case 1: scores();break;
		case 2: grafiek(scores);break;
		}
	}

	printf("geef uw keuze");
	scanf("%d",&keuze);
}

zelfde fout :) maar ik zie ze niet :(

Tyfius

Legacy Member
Code:
void drukmenu()
{
	int keuze;
	printf("\n\n 1:\t voer twee scores in");
	printf("\n\n 2:\t maak een grafiek met de ingevoerde scores");
	
	while(keuze!=99)
	{
		switch(keuze){
			case 1: scores(); break;
			case 2: [B][COLOR="Red"]grafiek(scores);[/COLOR][/B] break;
			}
	}

	printf("geef uw keuze \n");
	scanf("%d",&keuze);

}
Je roept hier "grafiek(scores)" op, maar "scores" is nergens binnen die functie gedefinieerd. De compiler komt wel de functie "scores" tegen en gaat die proberen te gebruiken wat dus tot het void-int probleem leidt.

Code:
[B][COLOR="Red"]void[/COLOR][/B] main()
Hiervoor zouden ze u al moeten straffen! Zie mijn uitleg in deze thread. En als dat een school opdracht is en uw docent/prof zegt dat ge "void main()" moet gebruiken moet ge hem kletsen geven en een andere leerkracht vragen want dan kent hij er obviously zelf niets van.

Waarom ge ook nog "printf()" en "scanf()" gebruikt in C++ is mij ook een raadsel.

edit: Er zit nog een andere fout ook in:
In uw eerste main implementatie doet ge het volgende:
Code:
if(gevonden==false)
		printf("uw gebruikersnaam en/of wachtwoord is onjuist\n");
	else
		printf("Welkom,%s\n",lijstnamen[plaats]);
		drukmenu();
Die functie "drukmenu()" gaat ALTIJD worden aangeroepen, ook als uw if-clausule "false" terug geeft. Indien je geen {} tekens gebruikt gaat die telkens maar het eerste statement NA de ) oproepen, in dit geval dus uw "printf()". Uw "drukmenu()" aanroep komt dan NA uw if-else clausule te staan en zal dus altijd worden aangeroepen, wat, denk ik, niet het gewenste resultaat is.

MetalG

Legacy Member
IMS mechelen eerste jaar :P

herexamens programmeren 1 omdak pas half december begonnen was! op de uitbreiding erwel door :P

hoe moet ik da dan juist oplossen (kben nog ni zo nen hele straffe programmeur :p)

/edit/ die druk menu geeft hij niet weer hoor.. heb net even getest.. zegt gewoon

uw gebruikersnaam en/of wachtwoord is onjuist
[einde prog]

Tyfius

Legacy Member
Code:
#include <iostream>

void drukmenu()
{
	std::cout << "drukmenu()" << std::endl;
}

int main(int argc, char *argv[])
{
	bool gevonden = false;

	if (gevonden == false)
		std::cout << "main() - if" << std::endl;
	else
		std::cout << "main() - else" << std::endl;
		drukmenu();

	return 0;
}
Output:
Code:
main() - if
drukmenu()
Press any key to continue . . .
Nu, ik heb nu weinig tijd om er grondig naar te kijken maar daar zitten toch nog een aantal "rare" dingen tussen hoor. In je "scores" functie doe je een "printf("%d score",scores);". Hier ga je het adres van de pointer afdrukken, is dat de bedoeling?

MetalG

Legacy Member
Tyfius zei:
Code:
#include <iostream>

void drukmenu()
{
	std::cout << "drukmenu()" << std::endl;
}

int main(int argc, char *argv[])
{
	bool gevonden = false;

	if (gevonden == false)
		std::cout << "main() - if" << std::endl;
	else
		std::cout << "main() - else" << std::endl;
		drukmenu();

	return 0;
}
Output:
Code:
main() - if
drukmenu()
Press any key to continue . . .
Nu, ik heb nu weinig tijd om er grondig naar te kijken maar daar zitten toch nog een aantal "rare" dingen tussen hoor. In je "scores" functie doe je een "printf("%d score",scores);". Hier ga je het adres van de pointer afdrukken, is dat de bedoeling?

uw bovenstaande code is voor mij chinees zover hebben wij nog niet geleerd.. :(

ja had ik ook al opgemerkt, scores = teller.

dat hij geef eerste, score, tweede etc!

kwas ook een & vergeten bij het scannen!

ik hoop dat het tegen straks werkt :>

door een of andere reden blijft hij nu in deze

for(teller=0;teller<2;teller++)
{
printf("geef een score");
fflush(stdin);
scanf("%d",&score[teller]);
}

lus hangen..

als ik mijn teller laat adrukken doet hij 0 1 0 1 0 1 0 1 0 1 -_-'

Tyfius

Legacy Member
Lian-Li zei:
uw bovenstaande code is voor mij chinees zover hebben wij nog niet geleerd.. :(
Cout en printf zijn ongeveer hetzelfde.

Edit: dan hebt ge toch ergens anders een fout, want bij mij werkt die teller wel :)

MetalG

Legacy Member
ik heb net

Code:
#define MAX 2
typedef char string[MAX];

void scores(string score[MAX])
{
	int teller;

	for(teller=0;teller<MAX;teller++)
	{
		printf("Geef een score in: \n");
		scanf("%d",&score[teller]);
		printf("%d",teller);
	}
}


void main()
{
	int keuze;
	string score[MAX];

	printf("geef uw keuze");
	scanf("%d",&keuze);

	while(keuze!=99){
		switch(keuze)
		{
		case 1: scores(score);break;
		//case 2: grafiek(score);break;
		}
	}

	printf("geef uw keuze");
	scanf("%d",&keuze);
}

in een nieuw projectje gedaan mr teller blijft lopen, kheb het is in strings veranderd, maar blijft ook zelfde :( snap het echt ni :s

Kreek

Legacy Member
Teller blijft neit lopen hoor, in uw main zit een oneindige while lus..

Code:
	while(keuze!=99){
		switch(keuze)
		{
		case 1: scores(score);break;
		//case 2: grafiek(score);break;
		}
	}

Voor uw while lus scan je 1 keer de integer keuze, maar op het einde vd while lus moet je die opnieuw scannen, anders blijft de keuze hetzelfde en kan die nooit '99' worden he..
Als je dan bv. 1 ingeeft, dan gaat die 1 oneindig veel keren uitvoeren en daarom denk je dat teller opnieuw blijft lopen.

Ik zou ook ineens een andere school zoeken. :P
C++ kent in principe geen printf en scanf, dat is voor C voor zover ik weet.
Uw main moet ook altijd een int returnen en mag het type void niet returen, zoals Tyfius hierboven reeds zei. Ik zou uw leerkracht ook kletsen geven als ik van u was.

[edit] Ik vermoed dat je nog meerdere vragen zal hebben als je in je projectje vordert. Daarom kan ik u een goede site aanbevelen, namelijk www.cplusplus.com! Lees de tutorials eens door enzo.. Dan zal je al een pak meer weten, denk ik.

Zo zou ik het dan snel doen:

Code:
#include <iostream>
using std::cout;
using std::cin;

ANDERE CODE

int main()
{
	int keuze;
	string score[MAX];

	cout << "Geef uw keuze op: ";
	cin >> keuze;

	while(keuze!=99){
		switch(keuze)
		{
		case 1: scores(score);break;
		//case 2: grafiek(score);break;
		}

	cout << "Geef uw keuze op: ";
	cin >> keuze;
	}

	return 0;
}

MetalG

Legacy Member
idd kreek!

tmacheerd :D

Code:
 void scores(int score[MAX])
{
	int teller;

	for(teller=1;teller<MAX;teller++)
	{
		puts("Geef een score in: \n");
		scanf("%d",&score[teller]);
	}
}

void grafiek(int score[MAX])
{
	int teller,getal1,getal2;

	getal1 = score[1];
	getal2 = score[2];

	for(teller=1;teller<getal1;teller++)
		printf("D");

	printf("\n");

	for(teller=0;teller<getal2;teller++)
		printf("O");
}

void main()
{
	int keuze;
	int score[MAX];

	printf("geef uw keuze");
	scanf("%d",&keuze);

	while(keuze!=99){
		switch(keuze)
		{
		case 1: scores(score);break;
		case 2: grafiek(score);break;
		}
		printf("geef uw keuze");
		scanf("%d",&keuze);
	}
}


en de code waarbij den inlog enal staat macheert ook :>
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan