Een klein stukje uit 'How not to program in C++',
Vindt de fout!
Program 4: Typical Initial Problem
A classic mathematical problem is to add the numbers 1 to 100. But this program seems come up with the wrong answer:
1 /************************************************
2 * A program to sum the numbers from 1 to 100 *
3 * using a brute force algorithm. *
4 ************************************************/
5 #include <iostream>
6
7 int main()
8 {
9 int sum; // The running sum
10 int count; // The current number
11
12 for (count = 1; count <= 100; ++count)
13 sum += count;
14
15 std::cout <<
16 "The sum of the numbers " <<
17 "between 1 and 100 is " <<
18 sum << '\n';
19 return (0);
20 }
Spoiler:
Scroll Down:
Answer 51: The programmer never bothered to initialize sum.
You [b]can't count on a uninitialized value containing anything[/b]. So sum may start out at 0, 5190, 123, 5, or something else.
What the programmer should have written is:
9 int sum = 0;
Hetzelfde geld voor een bool waarde, die mag men ook niet vergeten te initialiseren!
Hoi Jelte,
volgens mij heb je gelijk. Kijk hier: http://en.wikipedia.org/wiki/Boolean_data_type
... Boolean values are commonly represented by integers in C programs. ...
... defined to return a signed integer (int) result, either zero (for false) or nonzero (for true).
(in het hoofdstuk "History")
Dus: 1. als er geen initialisatie is is de inhoud van dat stukje geheugen toevallig. C(++) heeft geen automatische initialisatie.
en: 2. in C(++) is alles behalve "0" als "true" gedefiniërd. (dus niet alleen "1" !) "8" is dus niet verboden (wél ongebruikelijk).
Vriendelijke groet,
track
1. Geen initialisatie -> random geheugen -> klopt.
2. C kent geen type bool, tenminste niet in de taal zelf gebouwd. Vaak wordt of zelf een bool type gedefinieerd of een integer gebruikt.
Maar C is niet C++!! In C++ is bool wel degelijk een standaard type! De waarde van een bool is of
true of
false! Kijk maar na met
sizeof().
Elke compiler zal 1 bit aangeven dus zou 8 nooit mogen.
Het klopt dat false = 0 en true != false, maar dat geldt alleen voor "getallen", zoals bijvoorbeeld integers en de conversie van en naar dit soort data types.
Een bool met waarde [i]true[/i] wordt geconverteerd naar int -> waarde blijft 1
Een int met waarde 10 (of 100 of 8680, whatever :P) wordt geconverteerd naar bool -> waarde wordt 1 ([i]true[/i])
Een bool met waarde [i]false[/i] wordt geconverteerd naar int -> waarde blijft 0
Een int met waarde 0 wordt geconverteerd naar bool -> waarde blijft 0 ([i]false[/i])
Maar
bool booleanvar = 8;
is fout.