Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Wie beendet man eine Texteingabe in C++?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
02.01.2009, 15:13 Uhr
~Cazzy
Gast


Ich habe eine Funktion getEinkaufliste erstellt und möchte mit einer do-while Schleife die Eingabe beenden, wenn der Benutzer z.B. '0' eingibt.
So habe ich die Funktione codiert:


C++:
void Center::getEinkaufliste()
{
char Liste[250];

do
{
    cin.get (Liste, 249);
}while( != '0');

}



So funktioniert sie aber leider nicht ! Könnt ihr mir weiterhelfen?

Dieser Post wurde am 03.01.2009 um 22:13 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.01.2009, 18:14 Uhr
~Suba Esel
Gast


Naja, du kannst nicht einfach "while ( != '0' )" schreiben - du musst schon irgendeine Variable da reinsetzen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.01.2009, 19:06 Uhr
öni



Du könntest mit getchar() jedes einzelne Zeichen einlesen und bei 0 und Enter (Return) und eben bei 250 zeichen abbrechen und das ganze über eine forschleife realisieren, zeichen für zeichen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.01.2009, 20:03 Uhr
~Cazzy
Gast


Danke für die Tipps!
Ich hab das aber probiert mit der for-Schleife irgendwie klappt das nicht so recht !
So sieht meine for-Schleife aus:

for(int i=0; i<=250 || i != '13'; i++)
getchar(Liste[i]);

Aber nach dem Compiliern kommt immer diese Fehlermeldung:
no overloaded function takes 1 arguments

Aber ich hab doch nur 1 Argument in den Klammern!

Kann mir irgendjemand nochmal helfen? ....bin einbisschen nervig ich weiß^^!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
02.01.2009, 21:43 Uhr
0xdeadbeef
Gott
(Operator)


Wenn's darum geht, 250 Zeichen aus dem Stream zu holen,

C++:
std::cin.get(Liste, 250);


...allerdings vermute ich, dass es hier eher um das Einlesen einer Zeile, aber höchstens 250 Zeichen geht. Das ginge wie folgt:

C++:
std::cin.getline(Liste, 250);


Natürlich wäre es schöner, das ganze ohne Längenbegrenzung und gleich mit dem dafür geeigneten Datentyp std::string zu erledigen:

C++:
#include <string>

// ...

std::string Liste;
std::getline(std::cin, Liste);


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
02.01.2009, 21:54 Uhr
Hans
Library Walker
(Operator)


Hi,

Du musst schon selber mitzählen, wieviele Zeichen eingegeben werden. Dann könnte die Funktion etwa so aussehen:

C++:
void Center::getEinkaufliste()
{
  char c, Liste[250];
  int i;

  i=0;
  do
  {
     c = getchar();
     // hier kann man jetzt alles mögliche testen, und entsprechend reagieren...
     Liste[i] = c;
     i++;
  }while( c != '0');
}



Hans


Bearbeitung von 0xdeadbeef:

Verwirrendes color-Tag, das innerhalb des cpp-tags nicht funktioniert, entfernt. Durch b-Tag ersetzt.


--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 03.01.2009 um 07:53 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
03.01.2009, 14:50 Uhr
~Cazzy
Gast


Cool danke jetz funktioniert schon mal die Eingabe ! Aber wie mach ich das jetzt das die Eingabe bei Enter-Taste beendet wird? Ich habs schon mit dem ASCII Code von der Enter-Taste probiert, also 13....

do
{
c = getchar();
Liste[i] = c;
i++;

}while( c != '13');




Aber das funktioniert nicht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
03.01.2009, 21:27 Uhr
Hans
Library Walker
(Operator)


Hi,

versuch's mal so:

C++:
}while( c != '\13'); // Also mit 'nem Backslash "\" vor der Zahl



Ansonsten ist es auch ein gute Idee, die Vorschläge von 0xdeadbeef mal genauer zu testen, also:

C++:
std::cin.getline(Liste, 250);


Das wäre dann auch richtiges C++, wogegen die Variante mit getchar() klassisches C (ohne ++) ist.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
03.01.2009, 22:15 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,

"Enter" ist doch eigentlich Dezimal 10? also '\10' bzw '\n' bzw 10? 13 ist doch "Carriage Return"? (das was die unixianer net kennen)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: