1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Cpp von der Konsloe einlesen

Discussion in 'Programmieren' started by bastelhamster1, Jun 7, 2009.

Thread Status:
Not open for further replies.
  1. Hi Leute,

    ich habe da mal eine Frage zu C++
    und zwar geht es darum etwas von der Konsole einzulesen.

    Wie dies allgemein geht weis ich.
    Mein Problem liegt darin. Wenn ich eine Zeichenkette einlesen möchte,
    muss ich ja zunächst ein Array char[] festlegen,
    bekanntlich haben Arrays immer eine feste Länge.

    Nun möchte ich aber beliebig lange Zeichenketten von der Konsole einlesen.
    Die jeweilige Zeichenkette wird mit "ENTER" abgeschlossen.
    Gibt es die Möglichkeit das Array wo die Zeichen drin stehen im laufenden Programm je nach Zeichnenlänge /-anzahl anzupassen???
     
  2. t3leRübe

    t3leRübe ROM

    ich bin kein c programmierer aber vielleicht gehts so :

    #include <string.h>

    string deineVariable
     
  3. ja so kann es funktionieren,
    problem ist aber, dass gefordert ist, dass
    alles in ein char array stehen soll.
     
  4. kazhar

    kazhar Viertel Gigabyte

    wie lang kann die eingabe denn sein bzw wo kommt die her? tastatureingaben oder der output eines anderen programms?

    wenn es nicht zu viel ist (tastatur eingabe) kommst du m&#246;glicherweise mit einem festen 1-kb array locker zurecht.

    sonst k&#246;nntest du einen buffer mit z.b. 1k anlegen und bei bedarf zus&#228;tzlich speicher "anh&#228;ngen" (zur not als verkettete liste)
     
  5. daboom

    daboom Megabyte

    Die Klasse std::string nimmt Dir, vermut ich mal, die ganze Nachallokation ab.

    Die Frage, von wo Du was einlesen willst, wäre wirklich interessant...
     
  6. TheMars

    TheMars Byte

    Die Funktion nach der du suchst könnte string::c_str() sein

    PHP:
    #include <iostream>
    #include <string>

    using namespace std;

    int main()
    {
        
    // String einlesen
        
    string Eingabe;
        
    cout << "Bitte String Eingeben: ";
        
    cin >> Eingabe;
        
        
    // Länge des Strings in AnzahlZeichen speichen
        
    unsigned int AnzahlZeichen Eingabe.length();
        
        
    // ein Char-Array dieser Länge erzeugen
        
    char cArray = new char [AnzahlZeichen];
        
        
    // die Zeichen einzeln herüberkopieren -> C._str() liefert einen Zeiger auf ein Char-Array
        
    for(unsigned int momChar 0momChar AnzahlZeichenmomChar++) {
            
    cArray[momChar] = Eingabe.c_str()[momChar];}
        
        
    // String ausgeben (optional)
        
    cout << "String aus dem neuen Array: " << cArray << endl;
        
    system("pause");
    }
     
  7. daboom

    daboom Megabyte

    Warum nicht gleich
    PHP:
    charcArray Eingabe.c_str();
    ?

    Wenn das char Array noch weiter gebraucht werden sollte, muss man den string halt aufm Heap anlegen und global einen Pointer darauf merken, dass man den irgendwann wieder freigeben kann.
     
  8. TheMars

    TheMars Byte

    bei
    char* cArray = Eingabe.c_str(); ​
    ist cArray immer von Eingabe abh&#228;ngig, Eingabe.c_str() ist schreibgesch&#252;tzt und das ist cArray dann auch. Zudem "verschwindet" das Array ja mit dem Ende der G&#252;ltigkeit von Eingabe und cArray verwei&#223;t auf einen Speicher, der dann schon freigegeben wurde. :rolleyes:
     
  9. daboom

    daboom Megabyte

    Das ist es aber auch, wenn Du es rauskopierst. :rolleyes:

    OK, wenn man noch nachträglich drauf schreiben will, hast Du natürlich recht. Aber es gibt ja immer noch den const_cast :ironie:

    Darum habe ich ja auch was von "string aufm Heap anlegen" geschrieben. Bitte nochmal gründlich lesen ;)
     
  10. TheMars

    TheMars Byte

    Ja, das ist mir entgangen :o

    wie der TO das letztendlich l&#246;st kann er sich ja aussuchen - ich denke mal das alles weitere nur noch verwirrend wirkt.

    Edit: ...wobei als globale Variable ists ja auch nicht so geschmeidig gel&#246;st, wegen von &#252;berall her ver&#228;nderbar (global eben) etc.
     
    Last edited: Jun 7, 2009
  11. daboom

    daboom Megabyte

    Naja, ich meinte global eher in einem weiteren Sinne. Also irgendwie so, dass sie am Ende wieder aufgeräumt werden kann.

    Richtig. Also erstmal abwarten ;)
     
  12. RealC++

    RealC++ Kbyte

    So kann man es in C machen:


    HTML:
    #include <conio.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    char * console_read(void)
    {
    	char		input_char;
    	char		*input_str;
    	int		char_count;
    
    	//Init
    	input_str=NULL;
    	char_count=0;
    
    	while(1)
    	{
    		//Wait for input
    		while(!kbhit());
    
    		//Read char from console
    		input_char=getch();
    		printf("%c",input_char);
    
    		//End of input?
    		if(input_char=='\r')
    		{
    			//Terminate string
    			input_str=realloc(input_str,(char_count+1)*sizeof(char));
    			input_str[char_count]='\0';
    			
    			return input_str;
    		}
    		else
    		{
    			//Get memory for another char
    			input_str=realloc(input_str,(char_count+1)*sizeof(char));
    
    			//Write read char to string
    			input_str[char_count]=input_char;
    
    			++char_count;
    		}
    	}
    }
    
    int main(void)
    {
    	char *input;
    
    	//Get string from console
    	printf("Input:\n");
    	input=console_read();
    
    	//Print read string on console
    	system("CLS");
    	printf("Output:\n%s",input);
    	
    	//Abort
    	return EXIT_SUCCESS;
    }
    
     
  13. TheMars

    TheMars Byte

    noch einfacher geht es mi einem statischen Array das einfach gro&#223; genug ist:

    PHP:
    #include <iostream>
    #include <string>

    using namespace std;

    int main()
    {
        
    // ausreichend gro&#223;es Array erstellen
        
    char cArray[1024];
        
        
    // String einlesen
        
    cout << "Bitte String Eingeben: ";
        
    cin >> cArray;
        
        
    // String ausgeben (optional)
        
    cout << "String aus dem neuen Array: " << cArray << endl;
        
    system("pause");
    }
    Edit: Strings werden immer mit /0 beendet, wonach man dann einfach suchen m&#252;sste - dann kann man auch Zeiger etc verzichten, ist allerdings weniger zu empfehlen.
     
    Last edited: Jun 7, 2009
Thread Status:
Not open for further replies.

Share This Page