Zeiger
-
Hallo,
habe mal ne Frage zu den Zeigern:
#include <iostream> using namespace std; int main(){ int a; int b; int* c; // Geht auch einfacher, int* d; // ich weiß, wollte nur c = &a; // nochmal Zeiger üben...^^ d = &b; cout<<"Bitte geben Sie einen Wert für a ein: "<<endl; cin>>a; if(!(cin>>a)){ cerr<<"Fehler bei der Eingabe!"<<endl; exit(1); } cout<<"Bitte geben Sie einen Wert für b ein: "<<endl; cin>>b; if(!(cin>>b)){ cerr<<"Fehler bei der Eingabe!"<<endl; exit(1); } cout<<endl; cout<<"'a' hat den Wert '"<<a<<"' und die Adresse "<<c<<"."<<endl; cout<<"'b' hat den Wert '"<<b<<"' und die Adresse "<<d<<"."<<endl; return 0; }Wenn ich das Prog. ausführe kommt das:
Bitte geben Sie einen Wert für a ein: 1 // Erstwe Zahl eingegeben und [enter]! // trotzdem bekomm ich beim [enter] // immer wieder newline! 2 // Bis ich eine 2. Zahl eingebe. Bitte geben Sie einen Wert für b ein: 3 // Und nochmal die 1. // [enter] --> newline! 3 // Bei der 2. Zahl klappts^^ 'a' hat den Wert '2' und die Adresse 1245064. // Also nimmt er nur die 2. Zahl! 'b' hat den Wert '3' und die Adresse 1245060. // Und das ganze nur, wenn if drinne is!
-
cin>>a; if(!(cin>>a)) ...Du fragst hier mit dem ersten cin nach einer Zeichenkette, die man in ein int umwandeln kann. Mit dem if-statement startest du jedoch ebenfalls wieder eine Anfrage nach einer Zeichenkette.
Das hat mit Zeiger nichts zu tun.

Grüße...
Heiko
-
Also, cin>>a nimmt den Wert von a, soweit klar...^^
Aber Wie kann ich jetz prüfen, ob [ int a ] auch eine "richtige" Eingabe ist? Also nich z.B. "lol112.445", womit dann das Prog. probleme bekommt...^^
-
Mit...
bool all_okay = cin >> foo;... will sagen:
if( !(cin >> foo) ) ...Hiermit liest du ein und anhand des Rückgabewertes prüfst du direkt, ob alles in Ordnung ist. Übrigens sind auch Überläufe mögliche Fehlerquellen.
Grüße...
Heiko
EDIT:
cin >> a;nimmt natürlich nicht den Wert von a. (int) a wird auch niemals einen Wert in Form von "lol123.456" enthalten.
cin >> a; liest von dem Standardeingabestrom (in deinem Fall von der Tastatur) und versucht die gelesenen Zeichen so zu interpretieren, dass sie am besten auf den gewünschten Variablentyp (hier int) passen. cin liest so lange ein, bis es auf ein Zeichen trifft, welches nicht mehr passen wird - in deinem Fall alle Zeichen, die keine Ziffer darstellen.
Aus "1234abcdfg1234" liest cin nun "1234" aus dem Strom ('a' ist ja nun keine Ziffer) und wandelt diese in den Wert 1234 um. "abcdfg1234" verbleibt aber im Eingabestrom, darauf muss man achten.
-
Und wo kommt das
bool all_okay = cin >> foo;rein?
Und was bedeutet das "foo"?^^
-
http://de.wikipedia.org/wiki/Metasyntaktische_Variable

Diese werden dir noch häufig über den Weg laufen. Alles in allem solltest du dich aber vorweg mal in die "Ein- und Ausgabe mit Streams" einlesen. Das beantwortet viele deiner Probleme und Fragen.
Google ist dein Freund...
Grüße
Heiko
-
daLord schrieb:
Und wo kommt das
bool all_okay = cin >> foo;rein?
Und was bedeutet das "foo"?^^foo ist ne Variable, die eingelesen wird...
Außerdem kannst du mit
if(!cin) { /*Falsche Eingabe*/ }was besseres machen

-
Ich bekomme hier bei foo - Undefiniertes Symbol 'foo' in main(), Zeile 20.
Was muss dafür rein? a? Und wohin damit überhaupt?^^
-
Damit gehts:
int foo, ichbindoof=true;
-
Enten wieder gewickelt schrieb:
Damit gehts:
int foo, ichbindoof=true;Das kannst du dir sparen, auch wars bestimmt anfangs mal schwer von Begriff.
Foo (und auch bar) sind Namen, die man verwendet, wenn man ein Namen braucht, aber keine Ahnung hat, welchen man nehmen soll. Die Bedeutung ist also nicht vorhanden. Natürlich muss die variable foo vorher angelegt werden, oder ausgetauscht werden, bevor sowas wie "cin >> foo" funktioniert.
Alsoint foo; bool all_okay; all_okay = cin >> foo;all_okay steht auf false wenn sowas wie "lol112.445" eingegeben wurde.