-
Notifications
You must be signed in to change notification settings - Fork 3
/
bruch5scan.cpp
60 lines (53 loc) · 1.39 KB
/
bruch5scan.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/* Die folgenden Code-Beispiele stammen aus dem Buch:
* Objektorientiertes Programmieren in C++
* Ein Tutorial für Ein- und Umsteiger
* von Nicolai Josuttis, Addison-Wesley München, 2001
*
* (C) Copyright Nicolai Josuttis 2001.
* Diese Software darf kopiert, verwendet, modifiziert und verteilt
* werden, sofern diese Copyright-Angabe in allen Kopien vorhanden ist.
* Diese Software wird "so wie sie ist" zur Verfügung gestellt.
* Es gibt keine explizite oder implizite Garantie über ihren Nutzen.
*/
// **** BEGINN Namespace Bsp ********************************
namespace Bsp {
//...
/* neu: scanFrom()
* - Bruch von Stream strm einlesen
*/
void Bruch::scanFrom (std::istream& strm)
{
int z, n;
// Zähler einlesen
strm >> z;
// optionales Trennzeichen '/' und Nenner einlesen
if (strm.peek() == '/') {
strm.get();
strm >> n;
}
else {
n = 1;
}
// Lesefehler?
if (! strm) {
return;
}
// Nenner == 0?
if (n == 0) {
// Fail-Bit setzen
strm.clear (strm.rdstate() | std::ios::failbit);
return;
}
/* OK, eingelesene Werte zuweisen
* - ein negatives Vorzeichen des Nenners kommt in den Zähler
*/
if (n < 0) {
zaehler = -z;
nenner = -n;
}
else {
zaehler = z;
nenner = n;
}
}
} // **** ENDE Namespace Bsp ********************************