Registreer FAQ Ledenlijst Berichten van vandaag


Ga terug   Scholieren.com forum / Technologie / Software & Hardware
Reageren
 
Topictools Zoek in deze topic
Oud 21-09-2005, 22:29
Pinchy
Avatar van Pinchy
Pinchy is offline
Hallo.

Ik heb een über n44b vraag, maar ik kan het werkelijk nergens duidelijk vinden. Ik begin ook maar net met deze zooi, maar goed. Ik moet een bepaalde zin in hoofdletters hebben. Maar ik weet niet hoe dat precies moet. Ik weet wel dat je strupr moet gebruiken. Dit is wat ik heb. Eventjes eenvoudige neergezet:


#include <iostream>
#include <string>
using namespace std;
main()
{
cout << "Deze zin word geheel in hoofdletters afgedrukt." << endl;
return 0;
}


Serieus, ik voel gewoon schaamte nu. Maar ik weet het echt niet. Zou iemand me verder kunnen helpen? Bij voorbaat dank.

Edit: Ik gebruik DevC++ als compiler.
__________________
It's so plausible, I can't believe it.

Laatst gewijzigd op 21-09-2005 om 23:27.
Met citaat reageren
Advertentie
Oud 21-09-2005, 22:39
Geschiedenis
Avatar van Geschiedenis
Geschiedenis is offline
Nee sorry, dat kan ik niet.
__________________
I will let you down, I will make you hurt
Met citaat reageren
Oud 21-09-2005, 23:37
Pinchy
Avatar van Pinchy
Pinchy is offline
#include <iostream>
#include <cstring>
using namespace std;
main()
{
cout << (strupr("Dit is in hoofdletters")) << endl;
return 0;
}




Ik dacht dat dit het zou moeten zijn, maar dan krijg ik de volgende foutmelding:

"Een toegangsovertreding (Segmentatie-fout) is opgestreden in je programma."
__________________
It's so plausible, I can't believe it.
Met citaat reageren
Oud 22-09-2005, 00:24
Verwijderd
Citaat:
Pinchy schreef op 22-09-2005 @ 00:37 :
#include <iostream>
#include <cstring>
using namespace std;
main()
{
cout << (strupr("Dit is in hoofdletters")) << endl;
return 0;
}




Ik dacht dat dit het zou moeten zijn, maar dan krijg ik de volgende foutmelding:

"Een toegangsovertreding (Segmentatie-fout) is opgestreden in je programma."

Erm, je impliceert met return 0 dat de returntype van de main methode een numerieke danwel boolse waarde is; vermijd ambiguiteit en ook al spreekt het in het geval van main wel voor zich, geef main expliciet een int of bool o.i.d. als returntype. Of haal de return statement gewoon in z'n geheel weg, en gebruik geen (lees:void) als returntype.
Maar zelfs zonder genoemde aanpassing compileert hij hier en draait hij ook, dus vreemd Gecompileerd overigens met openwatcom.

Laatst gewijzigd op 22-09-2005 om 00:34.
Met citaat reageren
Oud 22-09-2005, 09:28
Pinchy
Avatar van Pinchy
Pinchy is offline
Citaat:
Ninh schreef op 22-09-2005 @ 01:24 :
Erm, je impliceert met return 0 dat de returntype van de main methode een numerieke danwel boolse waarde is; vermijd ambiguiteit en ook al spreekt het in het geval van main wel voor zich, geef main expliciet een int of bool o.i.d. als returntype. Of haal de return statement gewoon in z'n geheel weg, en gebruik geen (lees:void) als returntype.
Maar zelfs zonder genoemde aanpassing compileert hij hier en draait hij ook, dus vreemd Gecompileerd overigens met openwatcom.
Ik heb geprobeerd om openwatcom te gebruiken. Maar ik heb geen idee hoe ik deze moet gebruiken.

Ik kan niet wachten tot in Visual.net heb.
__________________
It's so plausible, I can't believe it.
Met citaat reageren
Oud 22-09-2005, 11:48
Verwijderd
Citaat:
Pinchy schreef op 22-09-2005 @ 10:28 :
Ik heb geprobeerd om openwatcom te gebruiken. Maar ik heb geen idee hoe ik deze moet gebruiken.

Ik kan niet wachten tot in Visual.net heb.
wcl programma.cpp

kind kan de was doen , watcom compiler linker doet de rest voor je.
Met citaat reageren
Oud 22-09-2005, 14:57
Pinchy
Avatar van Pinchy
Pinchy is offline
Probleem opgelost. Dit moest het zijn:

#include <iostream>
#include <string>
using namespace std;
main()
{
char zin[30] = "Dit is in hoofdletters";
strupr(zin);
cout << zin << endl;
}
__________________
It's so plausible, I can't believe it.
Met citaat reageren
Oud 22-09-2005, 15:08
MightyMarcel
Avatar van MightyMarcel
MightyMarcel is offline
is ook logisch. (let in deze post ff niet op eventuele syntax fouten, ik heb t niet gecheckt, t gaat om de uitleg.)

in je constructie 'cout << (strupr("blaat")) << endl;

is 'blaat' geen pointer, dus niet benaderbaar voor strupr. (zoiets iig). strupr verwacht een pointer.

(misschien dat je nu zeg 'maar 'zin' is geen pointer : dat istie wel, het is immers de naam van een array. de naam van een array zonder verdere toevoegingen resulteert in het adres van de array.).

waar ik nu eigenlijk benieuwd naar ben : als je dit opsplits dus :

strupr(zin);
cout << zin;

is het resultaat dan nog uppercase (hoofdletters) of niet ? (serieus, ik ben nieuwsgierig maar heb hier ff geen compiler bij de hand.)
__________________
Aut Caesar aut nullus
Met citaat reageren
Oud 22-09-2005, 16:28
dragonstorm
Avatar van dragonstorm
dragonstorm is offline
no manual entry for strupr

ehm, ehm, ehm....

http://www.thinkage.ca/english/gcos/...ib/strupr.html

toch een manual entry, maar toch.
Ik heb geen idee waarom je dit zou gebruiken.

edit:
Citaat:
is 'blaat' geen pointer, dus niet benaderbaar voor strupr. (zoiets iig). strupr verwacht een pointer.
Huh? Last I checked was "Blaat" in C een pointer. (Namelijk naar 'B') Heb moeite voor te stellen dat dit voor C++ niet geld.

Ik denk dat de fout is dat je de return value van strupr naar cout stuurt, terwijl je de de zin in kwestie naar cout wil sturen.

edit nog ein mal:
ik weet niet waar je de hele functie strupr vandaan haalt, maar gcc 3.4.3 herkent 'm iig niet. (En DevCpp gebruikt die). En bovendien istie niet onderdeel van de ANSI standaard.


Prachtige taal, C++

Laatst gewijzigd op 22-09-2005 om 16:38.
Met citaat reageren
Oud 22-09-2005, 22:10
GVR
GVR is offline
Citaat:
Pinchy schreef op 22-09-2005 @ 15:57 :

Probleem opgelost. Dit moest het zijn:

#include <iostream>
#include <string>
using namespace std;
main()
{
char zin[] = "Dit is in hoofdletters";
cout << strupr(zin) << endl;
}
Het probleem is dat je stdupr een pointer naar een constante geeft:

"xxx" -> const char *
char a[]= "xxx" -> char a[4] = {'x','x','x','\0'};

Wat je eerst deed leid tot ongedefinieerd gedrag, vandaar dat het bij watcom wel werkte.
Met citaat reageren
Oud 22-09-2005, 22:36
Verwijderd
Citaat:
MightyMarcel schreef op 22-09-2005 @ 16:08 :

strupr(zin);
cout << zin;

is het resultaat dan nog uppercase (hoofdletters) of niet ? (serieus, ik ben nieuwsgierig maar heb hier ff geen compiler bij de hand.)
Het is alweer een tijdje geleden dat ik C heb gedaan, maar volgens mij was strupr niet re-entrant safe; als hetgeen dat je net postte ervoor zorgt dat zin uppercase blijft, kan het niet anders dan dat strupr de pointer zin referenced en vervolgens aanpast.
Met citaat reageren
Oud 26-09-2005, 19:46
MightyMarcel
Avatar van MightyMarcel
MightyMarcel is offline
Citaat:
dragonstorm schreef op 22-09-2005 @ 17:28 :


Huh? Last I checked was "Blaat" in C een pointer. (Namelijk naar 'B') Heb moeite voor te stellen dat dit voor C++ niet geld.

Ik denk dat de fout is dat je de return value van strupr naar cout stuurt, terwijl je de de zin in kwestie naar cout wil sturen.

niet als 'blaat' gewoon als 'harde tekst' in je code staat lijkt me. (toegegeven, mn C is wat roestig geworden). hoewel je eerste opmerking niet geheel juist is volgens mij, heb je met je tweede opmerking een punt.

c-functies retourneren normaal gesproken niet het resultaat van de functie, vandaar de naam 'functie', lekker logisch. (ik snap de gedachte erachter wel, maar in 9 van de 10 gevallen is snelheid helemaal niet zo belangrijk dat je uberhaupt C zou willen gebruiken.)

inderdaad, mooie taal, C / C++
__________________
Aut Caesar aut nullus
Met citaat reageren
Oud 27-09-2005, 10:42
dragonstorm
Avatar van dragonstorm
dragonstorm is offline
nou ja, in de verdediging van C: ik kan in C wel gewoon 'man strtok' bijvoorbeeld oid intypen, en dan krijg ik de preciese functiebeschrijving en hoe je 'm zou moeten gebruiken. Met C++'s fijne non-standard libraries word dat een fijne tik lastiger.

Nee, ik weet zeker dat "Blaat" intern als pointer gerepresenteerd word, (een const char *) want ik doe het vaak

Of je zomaar die geheugenruimte mag aanpassen, dat weet ik niet zeker. Ik kopieer altijd de string in mijn functies.
Met citaat reageren
Oud 27-09-2005, 10:47
MightyMarcel
Avatar van MightyMarcel
MightyMarcel is offline
Citaat:
dragonstorm schreef op 27-09-2005 @ 11:42 :

Of je zomaar die geheugenruimte mag aanpassen, dat weet ik niet zeker. Ik kopieer altijd de string in mijn functies.
mij is altijd uitgelegd dat dat niet kan (niet mag in elk geval, niet kunnen is een groot woord).
__________________
Aut Caesar aut nullus
Met citaat reageren
Oud 28-09-2005, 11:15
GVR
GVR is offline
Citaat:
MightyMarcel schreef op 27-09-2005 @ 11:47 :
mij is altijd uitgelegd dat dat niet kan (niet mag in elk geval, niet kunnen is een groot woord).
Het is een string literal, en toewijzen hetzelfde als *(&'x')) = 'y'; het gaat niet werken, maar kan niet tijdens compiletime worden gedetecteerd. "XXXX"[2] = 'x' geeft wel duidelijke de fout.

ps. Je hoort er niet van uit te gaan dat het kan.

Laatst gewijzigd op 28-09-2005 om 11:40.
Met citaat reageren
Advertentie
Reageren


Regels voor berichten
Je mag geen nieuwe topics starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit

Spring naar


Alle tijden zijn GMT +1. Het is nu 13:39.