Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » tastatureingabe vom benutzer speichern

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 < [ 2 ]
000
23.01.2005, 17:20 Uhr
~burgerking
Gast


hi, ich möchte das die tastatureingabe vom benutzer in einem string gespeichert wird, solange bis zB 3 mal Enter gedrückt wurde... mein bisheriges ergebniss funktioniert leider nicht so ganz toll


C++:
    char *TmpArray;
    char zeile[100];
    char eingabe=0;
    int b=0;
    int ENTER=0;
    
    TmpArray = (char *)malloc(16000);
  
    if(option == 1) {
    
        printf("\n");
      
        while(ENTER<=1){
              
          eingabe=getche();
          zeile[b]=eingabe;
          
          b++;                  
          
          if(eingabe==13){
              strcat(TmpArray,zeile);
              strcat(TmpArray,"\n");
              printf("\n");                                 /* HIer muss noch zeile gelöscht werden*/
              b=0;
              ENTER++;            
          } else ENTER=0;  
          
        }
        
        printf("\n%s",TmpArray);
        
    }





Hat jemand vielleicht eine (bessere) Lösung meines Problems?

Oder sonst... wie lösche ich die einzelnen elemente von "zeile[100]" am besten ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
23.01.2005, 17:53 Uhr
t10ottoo




Zitat von ~burgerking:

Oder sonst... wie lösche ich die einzelnen elemente von "zeile[100]" am besten ?


Bei deinem anderen Problem kann ich dir jetzt auf die schnelle leider nicht helfen, sorry.

Aber wie du ein array am besten löscht, das kann ich dir sagen.
Also du machst ne for-Schleife, die bis 100 zählz und schreibst in jedes Element "" hinein.


C++:
for (int i = 0; i <= 100; i++)
{
    zeile[i] = "";
}



Müsste eigentlich funktionieren.

Gruß
Thomas
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
23.01.2005, 18:05 Uhr
Pablo
Supertux
(Operator)


Nein, nicht zeile[i] = ""; weil dann machst du char=char* !
Es muss sein:
zeile[i]=0;
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 23.01.2005 um 18:05 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
23.01.2005, 18:17 Uhr
t10ottoo



gleich 0?
Es ist doch ein char und kein int.
Aber naja, ich denk mal, du wirst recht haben

Wieder was dazugelernt.

Gruß
Thomas
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
23.01.2005, 18:57 Uhr
Oliver
S2-Pixelgeneral


Oder besser


C++:
memset(zeile,0,sizeof(zeile));


--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
23.01.2005, 19:22 Uhr
Pablo
Supertux
(Operator)


Um ein String zu löschen und um strcat zu benutzen, reicht folgendes:


C++:
zeile[0]=0;



Im Obigen Fall vor Ausführung des while Schleife


C++:
TmpArray[0]=0;




Zitat:

Es ist doch ein char und kein int.



ein char ist wie ein unsigned int, d.h. char x = 87; ist zulässig, und das weist der Variable x den ASCII Zeichen 87 zu.


C++:
char x = 0;



ist äquivalent zu


C++:
char x = '\0';



da '\0' == 0
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 23.01.2005 um 19:42 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
23.01.2005, 19:34 Uhr
~burgerking
Gast


ok,vielen dank, löschen von zeile klappt und mein tmparray ist am ende beinahe richtig, nur dass die ersten 3 zeichen x= sind
vielleicht ne ahnung wodurch das zu stande kommt? sonst lass ich TmpArray ohne die ersten 3 zeichen ausgeben aber das wär ja unnötiger mehraufwand...

mfg, burgerking
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
23.01.2005, 19:44 Uhr
Pablo
Supertux
(Operator)



Zitat von ~burgerking:

vielleicht ne ahnung wodurch das zu stande kommt? sonst lass ich TmpArray ohne die ersten 3 zeichen ausgeben aber das wär ja unnötiger mehraufwand...



hab doch oben gesagt, um strcat zu benutzen, muss dein string 0-terminierend sein, d.h.


C++:
TmpArray[0]=0;


vor der while Schleife (und direkt nach malloc) setzen


Zitat von Oliver:
Oder besser


C++:
memset(zeile,0,sizeof(zeile));






nicht unbedingt besser! Denn wenn zeile nicht in der selben Funktion deklariert wurde oder kein Array ist (bsp: Pointer auf Speicher mit malloc reserviert) liefert sizeof nicht die gewünschte Werte. Betrachte folgenden Code


C++:
#include <stdio.h>

void func(DATENTYP* x)
{
    printf("In func(): sizeof(x) = %d\n", sizeof(x));
}

void func2(DATENTYP x[])
{
    printf("In func2(): sizeof(x) = %d\n", sizeof(x));
}

int main()
{

    DATENTYP x[20];

    printf("Vor der Ausführung: sizeof(x) = %d\n", sizeof(x));

    func(x);
    func2(x);

    printf("Nach der Ausführung: sizeof(x) = %d\n", sizeof(x));

    return 0;
}



Wenn ich so kompiliere: gcc -oa a.c -DDATENTYP=int (Die Option -D bei gcc erzeugt ein Makro, d.h. -DDATENTYP=int ist dasselbe, als wäre im Code irgendwo #define DATENTYP int) dann bekomme ich folgende Ausgabe:

Code:
Vor der Ausführung: sizeof(x) = 80
In func(): sizeof(x) = 4
In func2(): sizeof(x) = 4
Nach der Ausführung: sizeof(x) = 80


wie du siehst, sizeof hat etwas ganz anders zurückgegeben, als func und func2.

Wenn ich so kompiliere: gcc -oa a.c -DDATENTYP=char dann bekomme ich

Code:
Vor der Ausführung: sizeof(x) = 20
In func(): sizeof(x) = 4
In func2(): sizeof(x) = 4
Nach der Ausführung: sizeof(x) = 20



Wenn ich so kompiliere: gcc -oa a.c -DDATENTYP=double dann bekomme ich

Code:
Vor der Ausführung: sizeof(x) = 160
In func(): sizeof(x) = 4
In func2(): sizeof(x) = 4
Nach der Ausführung: sizeof(x) = 160



Wie du siehst, func und func2 liefern immer 4 zurück, die Anzahl der Bytes, die der Pointer braucht und nicht die Anzahl der Elemente, die das Array ursprünglich hat.

Und wie gesagt, wenn man eine ganze Textzeile löschen will, setzt man auf 0 nur das erste Zeichen, das reicht, denn das ist der Sinn der 0-terminierende Strings.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 23.01.2005 um 19:45 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
23.01.2005, 19:53 Uhr
Oliver
S2-Pixelgeneral


@ Pablo: Ja, aber in seinen Quelltext stand nunmal


C++:
char zeile[100];



in der selben Funktion und in diesem Fall gibt es immer 100 zurück. Ich wollte ja nur sagen, dass das besser ist als ne Schleife, die hundertmal durchläuft.
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
23.01.2005, 21:45 Uhr
~burgerking
Gast


vielen dank, hat geklappt
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ 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: