Archief - [C++] Kijken of het een int of string is?

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.

Curahee Q

Legacy Member
Beste 9livers,

in mijn programma is een juiste invoer zoiets als
90 straatnaam

Nu moet ik gaan nakijken of de invoer zoals voorgaande is en het niet zoiets is
straatnaam 90

Als ik straatnaam in een int steek kom ik een zeer grote waarde uit, iemand die weet hoe deze waarde wordt bepaald of is dit een maxvalue van 1 of andere type?

Dus ik moet gaan nakijken of mijn invoer wel degelijk een int is en geen string.

Alvast bedankt.

Tyfius

Legacy Member
Die zijn hier mijns inziens overbodig als hij het niet in 1 string inleest. Plus, dan moet hij nog ergens een custom regex library gaan includen in zijn project. Als dit een schoolproject is kan dat niet de bedoeling zijn meestal.

Als je dat inleest in 2 aparte variabelen dan kan je al gaan kijken of dat inlezen goed gegaan is:
Code:
int x;
if (!(cin >> x)) {
  cout << "error!" << endl;
}
Of je kan de is_digit() functie gebruiken.

forloRn_

Legacy Member
En wat doe je met huisnummers die letters bevatten zoals 29A?

Gurdt

Legacy Member
Je kan ook karakters afgaan en de waarde daarvan gaan bekijken.
Op google vind je wel een ASCII-tabel waarin de waarde van de letters staat (een spatie is bijvoorbeeld 32)

Zo kan je letters van nummers onderscheiden ;)

Curahee Q

Legacy Member
Het is inderdaad een schoolproject dus reguliere expressies zijn hier uit den boze.

Huisnummers bevatten geen letters, misschien vergeten bij te vermelden.

Die code van Tyfius blijkt goed te werken, bedankt daarvoor. Is de functie is_digit() niet enkel voor 1 karakter, als je daar natuurlijk dan met een loop overgaat kan je dat wel gebruiken natuurlijk.

Heel erg bedankt

Dreamchaser

Legacy Member
forloRn_ zei:
En wat doe je met huisnummers die letters bevatten zoals 29A?

Idd, huisnummers opslaan in een int is gewoon idioot, zelfs als er geen letters in voorkomen.

Een huisnummer is gewoon statische data. Je moet er toch niet mee gaan rekenen, dus waarom zou je in godsnaam een int gebruiken? Daarmee veroorzaak je alleen maar problemen (bvb als er toch huisnummers met letters zouden voorkomen).

We leven ook niet meer in het COBOL-tijdperk, waar het nog op elke byte aankwam.

Zelfde geldt overigens voor alle gelijkaardige dingen zoals rijksregisternummers, telefoonnummers, ... maar daar heb je zelfs nog meer miserie als je ze opslaat als int:
- Als ze met nullen beginnen, dan ben je die nullen natuurlijk kwijt
- Als je een nummer hebt dat groter is dan MaxInt (10 cijfers = prijs) krijg je het niet eens in je integer

Ints dienen voor getallen, niet voor nummers!

Dreamchaser

Legacy Member
Is het btw in het .Net-framework? Daarin zitten wel een aantal handige functies hiervoor natuurlijk :), zoals int.TryParse() enzo.

Tyfius

Legacy Member
Dreamchaser zei:
Idd, huisnummers opslaan in een int is gewoon idioot, zelfs als er geen letters in voorkomen.

Een huisnummer is gewoon statische data. Je moet er toch niet mee gaan rekenen, dus waarom zou je in godsnaam een int gebruiken? Daarmee veroorzaak je alleen maar problemen (bvb als er toch huisnummers met letters zouden voorkomen).

We leven ook niet meer in het COBOL-tijdperk, waar het nog op elke byte aankwam.

Zelfde geldt overigens voor alle gelijkaardige dingen zoals rijksregisternummers, telefoonnummers, ... maar daar heb je zelfs nog meer miserie als je ze opslaat als int:
- Als ze met nullen beginnen, dan ben je die nullen natuurlijk kwijt
- Als je een nummer hebt dat groter is dan MaxInt (10 cijfers = prijs) krijg je het niet eens in je integer

Ints dienen voor getallen, niet voor nummers!
Als uw uiteindelijke getal groter is dan MaxInt hebde long long. Dan kan je weer een tijdje voort.

En het kan nog wel op elke byte aankomen. Niet iedereen ontwikkeld desktop applicaties die op een quad core met 12GB RAM geheugen moeten draaien. Er wordt nog genoeg software ontwikkeld op 64k ARM processoren.

Tenzij het echt de bedoeling is om met dat huisnummer bewerkingen te doen zou ik dat in dezelfde string als je straatnaam opslaan, maar anders is er geen reden om dat in een int of een ander numeric data type te doen.

forloRn_

Legacy Member
Tyfius zei:
Tenzij het echt de bedoeling is om met dat huisnummer bewerkingen te doen zou ik dat in dezelfde string als je straatnaam opslaan, maar anders is er geen reden om dat niet in een int of een ander numeric data type te doen.

Ik neem aan dat die "niet" daar weg moet, anders spreek je jezelf tegen.

Ik snap niet dat er hier nog over gediscussieerd wordt. :wtf: Een huisnummer is geen getal, punt. Sla het op als een string en laat dat parsen achterwege. Als de gebruiker het verkeerd invult, is dat zijn probleem. Je kunt misschien denken dat dat clever is, die huisnummers parsen als een int, maar uiteindelijk is het gewoonweg verkeerd.

Doet me denken aan Facebook, dat bij het registeren van mijn achternaam (Van den bosch) steevast Van den Bosch maakte, met een grote B. Welke idioot heeft zijn tijd zitten verspillen met die volstrekt nutteloze en verkeerde logica te programmeren?

/end rant

Tyfius

Legacy Member
Ja, die moet daar weg. Ik had daar eerst een andere zin getypt maar ik kon aan die woorden zelf niet meer uit :p

Curahee Q

Legacy Member
Opdracht voor school dus kan er zelf ook niks aan doen. Het moet in een int, punt. En het is de bedoeling da we een file inlezen, als deze een foute structuur heeft moeten we een exceptie geven.
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