c++ kod, varför sker detta?

Här diskuteras programmering och utveckling
Användarvisningsbild
kimU
Inlägg: 178
Blev medlem: 18 maj 2011, 08:10
OS: Ubuntu
Utgåva: 22.04 Jammy Jellyfish LTS

c++ kod, varför sker detta?

Inlägg av kimU »

#include<iostream>
using namespace std;
int sNamn(void);
int sKo(void);
int main()
{
cout<<"dina siffror adderade är: "<<sNamn()<<endl;
cout<<"dina siffror adderade plus 5 är: "<<sNamn()+5<<endl;
cout<<"ditt nummer är: "<<sKo()<<endl;
return 0;
}
int sNamn()
{
int a,b;
cout<<"skriv in en siffra: "<<endl;
cin>>a;
cout<<"skriv in en annan siffra: "<<endl;
cin>>b;
return (a+b);
}
int sKo()
{
int c;
cout<<"skriv in ett nummer: "<<endl;
cin>>c;
return(c);
}

Min fråga är varför funktionen sNamn() sker två gånger?
TicToc
Inlägg: 2266
Blev medlem: 27 dec 2006, 17:28
OS: Kubuntu
Utgåva: 20.04 Focal Fossa LTS

Re: c++ kod, varför sker detta?

Inlägg av TicToc »

kimU skrev: cout<<"dina siffror adderade är: "<<sNamn()<<endl;
cout<<"dina siffror adderade plus 5 är: "<<sNamn()+5<<endl;

Min fråga är varför funktionen sNamn() sker två gånger?
Du anropar sNamn två gånger. Försök med att lagra resultatet av det första anropet.
Användarvisningsbild
kimU
Inlägg: 178
Blev medlem: 18 maj 2011, 08:10
OS: Ubuntu
Utgåva: 22.04 Jammy Jellyfish LTS

Re: c++ kod, varför sker detta?

Inlägg av kimU »

TicToc skrev:
kimU skrev: cout<<"dina siffror adderade är: "<<sNamn()<<endl;
cout<<"dina siffror adderade plus 5 är: "<<sNamn()+5<<endl;

Min fråga är varför funktionen sNamn() sker två gånger?
Du anropar sNamn två gånger. Försök med att lagra resultatet av det första anropet.
Det som sker två gånger är att "adderade är:..." och "adderade plus är:..." skrivs två gånger efter varandra.
Undrar varför detta sker.
Användarvisningsbild
SlamsornasKung
Inlägg: 886
Blev medlem: 27 jun 2009, 19:23
OS: Ubuntu
Utgåva: 22.04 Jammy Jellyfish LTS
Ort: 08

Re: c++ kod, varför sker detta?

Inlägg av SlamsornasKung »

Jo, därför att du anropar den 2 ggr. Jämför med den här koden:

Kod: Markera allt

#include<iostream>
using namespace std;
int sNamn();
int sKo();
int sNamn_haemta_resultat();
int sKo_haemta_resultat();
int a,b,c = 0;

int main()
{
	sNamn();
	cout << "dina siffror adderade är: " << sNamn_haemta_resultat() << endl;
	cout << "dina siffror adderade plus 5 är: " << sNamn_haemta_resultat()+5 << endl;
	
	sKo();
	cout << "ditt nummer är: "<< sKo_haemta_resultat() << endl;
	return 0;
}

int sNamn()
{
	cout << "skriv in en siffra: " << endl;
	cin  >> a;
	cout << "skriv in en annan siffra: " << endl;
	cin  >> b;
}

int sNamn_haemta_resultat()
{
	return (a+b);
}

int sKo()
{
	cout << "skriv in ett nummer: " << endl;
	cin  >> c;
}

int sKo_haemta_resultat()
{
	return (c);
}
Din funktion ser ju ut som:

Kod: Markera allt

int sNamn()
{
int a,b;
cout<<"skriv in en siffra: "<<endl;
cin>>a;
cout<<"skriv in en annan siffra: "<<endl;
cin>>b;
return (a+b);
}
Varje gång du anropar den så anropas ju också cout<<"skriv in en siffra: "<<endl; med mera. Lösningen ovan kanske inte är klockren, men den har funktioner som _bara_ returnerar värdena (int sNamn_haemta_resultat();) _utan_ att skriva ut allting en gång till.

Som sagt, lösningen är nog allt annat än klockren (har använt globala variabler - vilket nog inte är så smart), men den kanske ger dig en fingervisning om hur du skulle kunna göra.

Förresten, det är lättare att felsöka om du indenterar din kod ordentligt. Ett tips bara.

Hoppas det var till någon hjälp.
HP NC2400 - Ubuntu 10.04 • Fujitsu Siemens AmiloM7400 - Arch Linux • HP/Compaq Mini 110C - Ubuntu 10.04
CryingFreeman skrev:[…] Ubuntu är och förblir en meritokrati, inget demokratiskt experiment där alla får säga vad som helst till vem som helst, hur som helst.
Användarvisningsbild
kimU
Inlägg: 178
Blev medlem: 18 maj 2011, 08:10
OS: Ubuntu
Utgåva: 22.04 Jammy Jellyfish LTS

Re: c++ kod, varför sker detta?

Inlägg av kimU »

SlamsornasKung skrev:Jo, därför att du anropar den 2 ggr. Jämför med den här koden:

Kod: Markera allt

#include<iostream>
using namespace std;
int sNamn();
int sKo();
int sNamn_haemta_resultat();
int sKo_haemta_resultat();
int a,b,c = 0;

int main()
{
	sNamn();
	cout << "dina siffror adderade är: " << sNamn_haemta_resultat() << endl;
	cout << "dina siffror adderade plus 5 är: " << sNamn_haemta_resultat()+5 << endl;
	
	sKo();
	cout << "ditt nummer är: "<< sKo_haemta_resultat() << endl;
	return 0;
}

int sNamn()
{
	cout << "skriv in en siffra: " << endl;
	cin  >> a;
	cout << "skriv in en annan siffra: " << endl;
	cin  >> b;
}

int sNamn_haemta_resultat()
{
	return (a+b);
}

int sKo()
{
	cout << "skriv in ett nummer: " << endl;
	cin  >> c;
}

int sKo_haemta_resultat()
{
	return (c);
}
Din funktion ser ju ut som:

Kod: Markera allt

int sNamn()
{
int a,b;
cout<<"skriv in en siffra: "<<endl;
cin>>a;
cout<<"skriv in en annan siffra: "<<endl;
cin>>b;
return (a+b);
}
Varje gång du anropar den så anropas ju också cout<<"skriv in en siffra: "<<endl; med mera. Lösningen ovan kanske inte är klockren, men den har funktioner som _bara_ returnerar värdena (int sNamn_haemta_resultat();) _utan_ att skriva ut allting en gång till.

Som sagt, lösningen är nog allt annat än klockren (har använt globala variabler - vilket nog inte är så smart), men den kanske ger dig en fingervisning om hur du skulle kunna göra.

Förresten, det är lättare att felsöka om du indenterar din kod ordentligt. Ett tips bara.

Hoppas det var till någon hjälp.

Ber om ursäkt, men jag klistrade in fel kod.
Doh!
De löste sig i alla fall.
Skriv svar

Återgå till "Programmering och webbdesign"