Teilnehmerliste erstellen mit Sortierung
-
Fellhuhn schrieb:
... fast immer geht? Äh, du kannst keine Strings in doubles speichern. Zumindest kommt da nichts sinnvolles bei raus. Du weißt schon was es für Datentypen gibt und was sie jeweils darstellen?
was sind denn strings?
naja so 100% weiß ich des nit alles. ich weiß dass double für gleikomma ist und int nur für zahlen oder halt kürzere namen
-
int ist nur für Integrale gedacht, für nichts anderes. double ist nur für Fließkommazahlen mit doppelter Präzision gedacht (gegenüber float mit einfacher Präzision). Für "Namen", also Zeichenketten (char ist ein Zeichen), benötigst du zB den komplexen Datentyp std::string, siehe http://www.cppreference.com/cppstring/index.html
-
Du solltedt std::string (header: <string>) nehmen, da double nur Zahlen (Fließkommazahlen) aufnehmen kann. Das deine Eingaben nicht greifen liegt daran, dass du falschen input erzeugst. Du kannst in double halt keinen Text wie einen Namen speichern. Dadurch wird in cin das failbit gesetzt.
#include <string> int main() { // nicht void main std::string vorname[1000],nachname[1000],nummer[1000]; int n = 0; // n initialisieren und int benutzen // Rest wie gehabt ... }Greetz
-
Ja, wenn du "heinz" in einen double-Wert schreiben willst, hat cin damit so seine Probleme (das erwartet an der Stelle einen Zahlenwert) - also setzt es ein Fehlerflag und geht in den Streik.
wog schrieb:
was sind denn strings?
Zeichenketten ;
ich weiß dass double für gleikomma ist und int nur für zahlen oder halt kürzere namen
double und int sind beides Zahlentypen, ersterer für beliebige Werte (inklusive Brüchen), letzterer nur für ganze Zahlen. Da irgendwelche "kürzere Namen" reinquetschen zu wollen dürfte schwierig werden. Namen und ähnliches kannst du als Zeichenkette auffassen - und in einem String unterbringen.
(wenn du in Mathe aufgepasst hast: double entspricht Q oder R, int entspricht Z - natürlich beschränkt durch die Rechengenauigkeit deines Computers)PS: Statt dich auf solches Halbwissen zu verlassen, solltest du noch einen Blick in dein Leerbuch werfen.
-
Hmm ja kann ich mal machen. Und wie muss ich denn jetzt die Felder deklarieren wenn kein double?
lgedit: glaub ich habs gefunden
-
So wie Vellas schrieb: std::string vorname[1000],nachname[1000],nummer[1000];
Wobei die Matrikelnummer ja nicht zwingend ein String sein muss. Da du damit aber wohl eh nicht rechnen willst, kann es nicht schaden, da es so auch sehr lange Nummern zuläßt oder sie auch alphanumerisch sein kann, was ja evtl. vorkommen kann.
-
Ihr meint also so:
#include <iostream> #include <cmath> using namespace std; void main (void) { std::string vorname[1000],nachname[1000],nummer[1000]; int n; cout<<"Bitte die Anzahl der Personen eingeben:"; cin>>n; cout<<"Bitte nun Vorname,Vorname und Martikelnummer eingeben"<<endl; for(int i=0;i<n;i++) { cout<<"Vorname"<<"["<<i+1<<"]"<<"="; cin>>vorname[i]; cout<<"Nachname"<<"["<<i+1<<"]"<<"="; cin>>nachname[i]; cout<<"Martikelnummer"<<"["<<i+1<<"]"<<"="; cin>>nummer[i]; }Geht aber leider immer noch nicht:()
-
Geht nicht ist keine Fehlermeldung.
Aber dir fehlt das include um std::string nutzen zu können (das steht aber auch in meinem Beitrag oben):#include <string>Greetz
-
Na Super unser Prof hat uns gemeint da oben wird nie was verändert. Das sollen wir immer einfach übernehmen.:) Sollten wir erst im 2.Semester lernen. Naja egal was solls.
DankeEdit:Danke es funktioniert schon mal. Jetzt werde ich mich mal an die Groß/kleinschreibänderung machen. Bis...

lg
wog
-
#include <iostream> #include <string> int main() { std::string name[1000], surname[1000]; int marticulationNumber[1000], persons; std::cout << "Bitte die Anzahl der Personen eingeben: " << std::endl; std::cin >> persons; std::cout << "Bitte nun Vornamen, Nachnamen und Matrikelnummern eingeben" << std::endl; for(int i = 0; i < persons; ++i) { std::cout << "Vorname" << "[" << i + 1 << "]" << " = "; std::cin >> name[i]; std::cout << "Nachname" << "[" << i + 1 << "]" << " = "; std::cin >> surname[i]; std::cout << "Martikelnummer" << "[" << i + 1 << "]" << " = "; std::cin >> marticulationNumber[i]; } }Professor:

-
Ah super, also wieder so ein Professor der einem erst beibringt wie ein Motor funktioniert, bevor er einem zeigt, wie man das Auto bewegt.
-
Hmm naja ich habs hier im Script doch gefunden mit dem string einbinden. Naja mehr kann ja nit an alles denken. Schande über mein Haupt. Das mit dem Heade so lassen gilt wohl nicht mehr für diese Aufgabe.
-
Muss ich denn die Umwandlung von Groß und Kleinschreibung schon in die for Schleife reintun oder erst danach anwenden ich hatte nämlich so geschrieben
vorname[0]=toupper(vorname[0]); aber des hat ja keine einwirkung auf das Programm
das ham wir als bps bekommen aber ich habe ja hier ja jetzt nit nur ein string sondern gleich ein ganzes string feld
#include <iostream> #include <string> using namespace std; void main (void) { string s1 = "abc", s2 = "XYZ"; s1[0] = tolower(s2[0]); s2[1] = toupper(s1[1]); cout << s1 << endl << s2 << endl; } /* Ausgabe: xbc XBZ */
-
Dir ist klar, daß tolower() nur ein einzelnes Zeichen umwandelt und nicht einen kompletten String? Du mußt es schon auf jedes Zeichen des String loslassen, damit etwas sinnvolles herauskommt (eventuell ausgelagert in eine eigene Funktion):
void adjust(string& wert) { wert[0]=toupper(wert[0]); for(int i=1;i<wert.length();++i) wert[i]=tolower(wert[i]); } ... for(..) { cin>>vorname[i];adjust(vorname[i]); ... }
-
Na super wie will ich das denn machen:( Wir lernen eigene Funktionen erst nächstes Semester ich weiß nit wie der sich des vorstellt:) ich meinte übrigens toupper und nit tolower soll ja groß werden der erst buchstabe und nit klein
-
Also nur der erste Buchstabe??
Dann in der Schleife...
... std::cout << "Vorname" << "[" << i + 1 << "]" << " = "; std::cin >> name[i]; name[i][0] = toupper(name[i][0]); std::cout << "Nachname" << "[" << i + 1 << "]" << " = "; std::cin >> surname[i]; surname[i][0] = toupper(surname[i][0]); ...MfG
-
Hmm, du kannst auch diese Schleifenkonstruktion direkt in deine Eingabe einarbeiten:
cin>>vorname[i]; vorname[i][0]=toupper(vorname[i][0]);//der erste Buchstabe groß for(int j=1;i<vorname[i].length();++j) vorname[i][j]=tolower(vorname[i][j]);//alle übrigen Buchstaben kleinLordJaxom schrieb:
Ah super, also wieder so ein Professor der einem erst beibringt wie ein Motor funktioniert, bevor er einem zeigt, wie man das Auto bewegt.
Dem kann ich mich nur anschließen

-
ceplusplus@loggedoff schrieb:
Also nur der erste Buchstabe??
Dann in der Schleife...
... std::cout << "Vorname" << "[" << i + 1 << "]" << " = "; std::cin >> name[i]; name[i][0] = toupper(name[i][0]); std::cout << "Nachname" << "[" << i + 1 << "]" << " = "; std::cin >> surname[i]; surname[i][0] = toupper(surname[i][0]); ...MfG
ja der erst groß und die andern halt alle klein.
was ist denn immer das std:: davor? kann man das denn nicht weglasen? sowas habe ich noch nie gesehen
-
Dann das letzte Beispiel von CStoll.
Mit std:: sprichst du den Namensbereich an, in dem die C++-Standardfunktionen liegen. Stattdessen kannst du, wie du auch schon gemacht hast, using namespace std; schreiben, dann wird der std-Namensbereich automatisch verwendet, ohne ihn vorher mit dem Bereichsoperator :: ansprechen zu müssen.
MfG
-
CStoll schrieb:
LordJaxom schrieb:
Ah super, also wieder so ein Professor der einem erst beibringt wie ein Motor funktioniert, bevor er einem zeigt, wie man das Auto bewegt.
Dem kann ich mich nur anschließen

Oder mit dem Bus fahren. Ist auch umweldfreundlicher und nicht so stressig. Man muss auch keinen Führerschein haben. Wer eine Metapher findet darf sie behalten.

Man muss das aber auch mal aus der Sicht des Lehrenden sehen. Es ist nicht gerade einfach bei Wissensdingen (gilt besonders fürs Programmieren) Gänge herunterzuschalten (juhu, wieder die Auto-Metapher) und alles aber auch wirklich alles aus der Sicht eines Neulings zu sehen. Alleine die Einbindung eines weiteren Headers geschieht bei geübten Programmierern dermaßen automatisch, daß da gar kein Gedanke mehr dran verloren wird.
Mein Tipp: Nimm dir eine gute Referenz (zB www.cppreference.com) und schau dir einfach mal an was für Typen und Funktionen es in C und C++ gibt. Dort steht auch der jeweils benötigte Header. Spiel etwas mit herum, auch wenn es die Aufgabe nicht erfordert. Da lernt man schon einiges bei. Gerade bei der Programmierung reichen die gestellten Aufgaben nie aus, um ein gutes Verständnis zu bekommen. Ausufernde Eigeninitiative ist unabdingbar.