Probleme mit char Array



  • Hallo,

    habe mal wieder ein Problem mit meinem Programm in Visual C++. Die Lösung ist warscheinlich mal wieder das einfachste was mir nicht in den Sinn kommt, allerdings hab ich zur zeit irgendwie ein Hänger ^^, zumindest weiß ich nicht weiter.

    Mein Problem ist folgendes:

    ich habe ein char array in dass der Benutzer einen Text eingeben kann

    cin.get (c_Story, 500);
    

    und ein Befehl der die Länge des Textes liest und speichert

    n_Länge =strlen(c_Story);
    

    wenn ich dies durch eine Schleife aufrufen möchte:

    for (int i = 0;i<n_Länge;i++)
    	{
    
    		cout << c_Story[i];
    		Sleep(200);
    
            }
    

    Schneidet er den ersten Buchstaben ab -.- 😕
    also wenn ich "Hallo" eingebe, wird durch die Schleife "allo" ausgegeben
    Hoffe ihr könnt mir helfen.

    mfg Sumpfarsch



  • Zeig doch mal den Code am Stück. Außerdem wäre es interessant zu wissen, ob dein get()-Aufruf das einzige ist, was Daten vom Benutzer einliest.

    (PS: Und du brauchst den String nicht zeichenweise auszugeben - ein einfaches cout<<c_Story; hat den selben Effekt)



  • Dessen bin ich mir bewusst. Allerdings wie du gleich sehen wirst ist dies in meinem Programm notwendig, zumindest wüsste ich nicht wie ich es sonst machen sollte.
    nun der Code:

    #include <iostream>
    #include <windows.h>
    #include <mmsystem.h>
    #include <string>
    #pragma comment( lib, "winmm.lib" )
    
    using namespace std;
    
    int main ()
    {
    
    	char c_Story[501] ;
    	int n_Länge;
    
    	cout << "schreibe deine eigene Story (max 500): \n";
    	cin.ignore ();
    	cin.get (c_Story, 500);
    
    	n_Länge =strlen(c_Story);
    
    	for (int i = 0;i<n_Länge;i++)
    	{
    
    		cout << c_Story[i];
    		Sleep(200);
    
    		if (c_Story[i] == ' ')
    		{
    			sndPlaySound(TEXT("Space 2.wav"), SND_ASYNC);
    			Sleep(150);
    		}
    		else if ((c_Story[i] == '.')||(c_Story[i] == '?')||(c_Story[i] == '!'))
    		{
    			sndPlaySound(TEXT("Enter.wav"), SND_ASYNC);
    			cout << "\n";
    			Sleep(500);
    		}
    		else 
    		{
    			sndPlaySound(TEXT("Key.wav"), SND_ASYNC);
    			Sleep(50);
    		}
    	}
    
    	system ("Pause");
    	return 0;
    
    }
    

    wie du nun siehst, wird zu jedem zeichen ein Sound abgespielt so als würde jemand etwas in den Pc eingeben :D.#
    Ich hoffe du verstehst nun was ich vorhabe. Vieleicht findest du ja einen Fehler.

    mfg Sumpfarsch



  • Nimm das cin.ignore() raus. Wieso hattest du es überhaupt drin?



  • 1.Jetz funzts danke 🙂
    2.Hab dacht des brauch ich bei einem cin.get Befehl ? 😕 .



  • Sumpfarsch schrieb:

    2.Hab dacht des brauch ich bei einem cin.get Befehl ? 😕 .

    Was sagt denn die Doku, was ignore bewirkt?



  • Sumpfarsch schrieb:

    1.Jetz funzts danke 🙂
    2.Hab dacht des brauch ich bei einem cin.get Befehl ? 😕 .

    Das ignore() benötigst du nicht vor dem get() bzw. getline(), sondern nach anderen Eingabe-Operationen (per Eingabe-Operator), um die zurückgebliebenen Zeilenwechsel aus dem Tastaturpuffer zu entsorgen.


Anmelden zum Antworten