Ein Problem mit lenght() !!!
-
Ich möchte gerne das die Eingabe von "personalNr" begrenzt ist.
D.h., dass man max. 4 Zeichen eingeben kann. Habe viele Threads gelesen und gaaanz viel gegoogelt jedoch kommt oft alter Krempel raus oder dramatisches Englisch das ich nicht verstehe.#include <iostream> #include <windows.h> #include <conio.h> #include <fstream> #include <string> using namespace std; int personalNr,zugangscode; int pnr =1234; int zc =5678; int main(void) { cout << "===============================================================\n"; cout << "----------Willkommen zur Datenbank der Firma Müller----------\n"; cout << "===============================================================\n"; cout << "\n\n\n"; cout << "Geben Sie bitte Ihre personalNr ein.\n"; cin >> personalNr; if (personalNr.length() > 4) // <----- Da sitzt der WURM { cerr << "Die PersonalNR ist zu Lang bitte versuchen sie es erneut\n"; getch(); return EXIT_SUCCESS; } cout << "\n\n\n"; cout << "Bitte geben Sie Ihren Zugangscode ein.......:\n"; cin >>zugangscode; cout << "\n\n\n"; if ((personalNr == pnr) && (zugangscode == zc)) { cout << "Zugang gewaehrt - Guten Tage Herr Müller\n\n\n"; } else { cout << "Personalnummer oder Zuganscode falsch\n\n\n"; } ifstream dat_ein; string dateiname; cout << "Wählen sie ein Menüpunkt aus und drücken sie die EENTER-Taste\n"; cout << "=============================================================\n"; cout << "= Nr. == 1 ==== Mitarbeiter-Daten =======================\n"; cout << "= Nr. == 2 ==== Finanz-Daten =======================\n"; cout << "= Nr. == 3 ==== Aussattungsdaten-Daten=======================\n"; cout << "= Nr. == 4 ==== Ausliefer-Daten =======================\n"; cout << "= Nr. == 5 ==== Anzahl verkaufter Systeme-Daten==============\n"; cout << "=============================================================\n"; cin >> dateiname; cout << endl; string dat_end(".txt"); dateiname.append(dat_end); dat_ein.open (dateiname.c_str(), ios_base::in); if(!dat_ein) { cout << "Falsche Eingabe oder Datenbank beschädigt bitte versuchen sie es erneut!"; cout << endl; system ("PAUSE"); return EXIT_SUCCESS; } char zeichen; while (!dat_ein.eof()) { dat_ein.get(zeichen); cout << zeichen; } getch(); return 0; }in der 28. Zeile kommt folgender Compiler-Fehler :
In function `int main()': `length' has not been declared request for member of non-aggregate type before '(' tokenHaber aber gesehen das es bei Anderen problemlos klappte bzw. deren Problem gelöst wird.
oder wird die Funktion gar nicht mehr benutzt (veraltet
)????Danke im Voraus
-
int personalNrjetzt überleg dir nochmal was integer datentypen sind, und was klasseninstanzen sind

lordcesarius schrieb:
Haber aber gesehen das es bei Anderen problemlos klappte
das halte ich aber mal sowas von für ein gerücht. nicht mit diesem code

edit: !!111!!11!!1onehundredelevenandone1!!11!
-
Was er dir damit sagen will, ist: Mach einfach das ".length()" weg. *g*
Gruß Tobi.
-
#include <cmath> if(log10(static_cast<double>(personalNr))+1>4)
-
cmath.pro schrieb:
#include <cmath> if(log10(static_cast<double>(personalNr))+1>4)
Ja, eben. Wieso einfach, wenn's auch kompliziert geht?
Also wirklich …
if (personalNr > 9999)
-
@sothis_
Integer sind Ganzzahlen wenn ich mich nicht irre.
Klasseninstanzen hatte mich mal was von im kopf, aber wer c++ lernen möchte der
muss sehr viel lesen.Mein Kopf ist viel zu klein um alles zu speichern
Denn falls ein Problem auftritt google ich erstmal wie ein verrückter und dann Melde ich mich. -----> siehe UHRZEIT bin so gegen 2:15 angefangen und um 04:36:35 habe ich aufgegeben ^^@Tobi
Jemand die show stehlen ist nicht nett
.
Der hat Recht denn nur durch nachenken kommt man später fast immer alleine auf die LösungPS: Dein Tipp funzt nicht einmal
:p 
@cmath.pro
Tut mir leid deine Lösung habe ich gegenint (personalNr.length() > 4)und darunter noch einen
else {}ausgetauscht und funzt trotzdem nicht!
kommt folgendes bei raus:
In function `int main()': 37 expected primary-expression before "else" 37 expected `;' before "else"wenn ich
else {}Weglasse dann passiert das jede Zahl die ich eingebe zu lang ist (auch die zahl 1 oder 1234)
verstehe jetzt gar nichts mehr
!!Danke im Vorraus
-
Du kannst
length()nicht auf Integer anwenden. Wieso versuchst du es dennoch, nachdem es dir schon mehrmals gesagt wurde?
Du scheinst die Antworten der anderen gar nicht zu beachten
Was willst du genau? Erkennen, ob eine Zahl mehr als 4 Stellen hat? Wenn ja, nimm doch Folgendes:
if (personalNr > 9999) { // Zahl ist mindestens 5-stellig } else { // Zahl ist höchstens 4-stellig }Du kannst
elsenur nach einemifbenützen, deshalb deine Fehlermeldung.
Du solltest erst einmal richtig C++ lernen. Wenn dein Kopf dafür zu klein ist, können wir dir leider auch nicht helfen
-
Gar nicht beachten?Das geht ja schon mal gar nicht.Da ich Inhalts-bezogen antworte.
Siehst ja selber was ich möchte:cerr << "Die PersonalNR ist zu Lang bitte versuchen sie es erneut\n";lies DU doch bitte vorher den Beitrag.
dann habe ich doch einen IF vorher gepackt, habe mich nur verschrieben.
und Konrad Rudolph habe ich übersehen.nicht alles bei c++ ist logisch und nachvollziehbar.Viele Bücher, Interntetforen und PDF's sind entweder veraltet, schlecht erklärt, gar nicht erklärt, auf fachenglisch oder gar falsch.
Daher gibt es auch www.c-plusplus.net oder stellst die ganze Internetpräsenz in frage?Wenn man c++ doch einfach nur Lernen muss,dann gibt es ja deiner Meinung nach ja gar kein Problem und man könnte die Seite ja ganz schließen, oder?
Das dazu

so trotzdem Danke
es funzt jetzt.
Wie kann ich aber bei einer falsch eingabe zurück zucin >> personalNrkommen?
ohne dabei eine Switchverzweigung einzuleiten.
-
Sorry, ich wollte dich nicht angreifen. Ich hab auch nichts dagegen, wenn hier die Leute ihre Fragen stellen. Du schienst nur den Eindruck zu machen, nicht auf die Antworten einzugehen - aber das hat sich jetzt ja geklärt.
Zu deiner Frage: Du kannst eine Schleife erstellen, die bei einer Falscheingabe noch einmal von vorne gestartet wird:
int personalNr; while (true) { cin >> personalNr; if (/* Eingabe nicht gut */) { cout << "Falsche Eingabe. Bitte nochmals eingeben:" << endl; continue; // beginnt die Schleife von vorne } else { // hier machst du etwas mit der Eingabe break; // verlässt die Schleife } }Eigentlich könntest du es auch mit
gotomachen, würde ich dir aber nicht raten.
-
Ja ist nicht gut von mir so zu reagieren.Manchmal ist das in Foren notwendig
weil manche idioten sich aufspielen und meinen sie hätten das Sagen und zu entscheiden welche Frage berechtigt ist und welche nicht.Habe dich falsch eingeschätzt
SORRY :pDanke für den Tipp werde es sofort versuchen.