mehre Wörter in einer Variable speicern



  • ich glaube ich habs etwas verstanden, und wozu ist das m bei char[n][m]?

    und wie baue ich das ein?



  • char[n][m] steht für ein zweidimensionales Array. Mag sein, dass es in C so nicht funktioniert - ich hab es zu lange nicht mehr gebraucht.

    Wenn du z.b. Anna und Peter speichern willst, geht das so:

    // Anlegen
    CStringArray arr;
    // Füllen
    arr.Add("Anna");
    arr.Add("Peter");
    // Auslesen
    for (int i = 0; i < arr.GetSize(); i++)
    {
        AfxMessageBox(arr.GetAt(i));
    }
    

    Das ist jetzt nicht getestet, sollte aber laufen. 🙂



  • die steigerung von array ist matrize!

    int array1[8];
    int matrize1[3][8];

    in array würde z.b. stehen:

    array1 ->
    1 2 3 4 5 6 7 8

    matrize1 ->
    1 2 3 4 5 6 7 8
    1 2 3 0 5 6 7 8
    1 2 3 4 5 6 7 8

    mit eine matrize läßt sich bei größen Datenmengen konfortabeler arbeiten!
    du kannst so zum beispiel um die 0 in der Matrize zu ändern einfach
    maztize[1][3] = 4;
    ausführen!
    wichtig halt auch hier genau so wie bei einfachen arrays die erste komponente fängt mit 0 an!

    bei deinem char[n][m]
    wäre das n die Zeile und das m die Spalte 💡
    halt einfach ein 2 dimensionalen Array 😉

    sven



  • Ein CStringArray kannst du aber auch so verwenden :

    CStringArray strArray;
    strArray.SetSize(3);
    
    strArray[0] = "Hallo \n";
    strArray[1] = "C++ ";
    strArray[2] = "Programmierer";
    
    for(int i = 0; i < strArray.GetSize(); i++)
    {
         AfxMessageBox(strArray[i]);
    }
    

    Gruß
    :: NoName ::



  • Hi, ja ich hab alles verstanden *g*. Muss man das verstehen?
    Also, angefangen zu lachen hab ich, als das wort arrays ins spiel kam. Und dann noch die Steigerung *g*
    Häääää?
    Könntet ihr das vielleicht nochma in deutsch erklären? 😕 So für dumme? Die echt absolut keine Ahnung haben?*g*
    ich lch mich grad darüber tot, dass ich keine ahnung von diesem thread hab
    Ok. vergesst es, ich bin ein mädchen....:)



  • hiermit geht das soweit:

    CStringArray strArray; 
    strArray.SetSize(3); 
    
    strArray[0] = "Hallo \n"; 
    strArray[1] = "C++ "; 
    strArray[2] = "Programmierer"; 
    
    for(int i = 0; i < strArray.GetSize(); i++) 
    { 
         AfxMessageBox(strArray[i]); 
    }
    

    Aber ich muss das immer zu einem Button machen, aber ich will, dass es im ganzen Programm abrufbar ist, also global, und ich möchte es in einem AB-Feld anzeigen.



  • Hallo,

    supersass1 schrieb:

    ...aber ich will, dass es im ganzen Programm abrufbar ist

    Leg doch eine private Funktion an und füge den Code dort ein, dann ist die Funktion in der ganzen Klasse gültig !

    supersass1 schrieb:

    ... und ich möchte es in einem AB-Feld anzeigen.

    Was ist bitteschön ein AB-Feld ¿?

    Cheers
    Stinger



  • Stinger schrieb:

    Was ist bitteschön ein AB-Feld ¿?

    ich meinte Eingabefeld...

    und wie lege ich eine private Fubktion an?

    irgendwie mit:

    private;
    

    oder?



  • Verwende SetDlgItemText() ... weitere Infos gibts in der MSDN

    Gruß
    :: NoName ::



  • Was ist MSDN?

    und wie kann ich SetDlgItemText() mit dem Quellcode verknüpfen?



  • Die MSDN ist ein Nachschlagewerk für Programmierer ...

    Schau selbst :
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_cwnd.3a3a.setdlgitemtext.asp

    SetDlgItemText musst du so verwenden :

    SetDlgItemText(ID_DEINER_EDIT_BOX, "Hier der Text ...");
    

    Gruß
    :: NoName ::



  • Microsoft Developer Network (MSDN)

    die msdn ist dein freund und helfer in schwierigen Fragen! 😃
    Es kann dir alles beantworten was du über bestimme Funktionen wissen willst!

    makiere in deiner IDE eingfach mal die Methode SetDlgItemText und drücke F1 dann sollte ein Fenster mit der MSDN aufgehen und dir anzeigen wie man mit der Methode umzugehen hat!

    Voraussetzung dafür ist allerdings das du die MSDN mit deinem VC x.x installiert hast! Was du auch umbedingt nachholen solltest wenn du es noch nicht hast!

    Als Alternative der Link von :: NoName ::

    Sven



  • Danke :: NoName :: 🙂

    aber wie verknüpft ihr:

    private;
    

    mit dem Quelltext und wie funktioniert private genau?



  • Ich meine das so, du gehst in die Dlg.h rein und schreibst dort eine private Funktion nach der Message-Map:

    Dlg.h :

    public:
    	CReminderDlg(CWnd* pParent = NULL);	// standard constructor
    	//}}AFX_DATA
    
    	// ClassWizard generated virtual function overrides
    	//{{AFX_VIRTUAL(CReminderDlg)
    	protected:
    	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support
    	//}}AFX_VIRTUAL
    
    // Implementation
    protected:
    	HICON m_hIcon;
    
             ....... ..
             .......
             ....  ..
    	//}}AFX_MSG
    	DECLARE_MESSAGE_MAP()
    
    [b][u]private:
    	void WriteArray();[/u][/b]
    
    };
    
    //{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
    
    #endif // !defined(AFX_REMINDERDLG_H__7233C9D7_83FF_4912_8BB9_59180FA76CD8__INCLUDED_)
    

    Jetzt gehst du in deine CProgrammDlg.cpp rein und kannst dort den Code in die Funktion reinschreiben :

    ...
    .....
    void CProgrammDlg::WriteArray()
    {
       CStringArray strArray; 
       strArray.SetSize(3); 
    
       strArray[0] = "Hallo \n"; 
       strArray[1] = "C++ "; 
       strArray[2] = "Programmierer"; 
    
       for(int i = 0; i < strArray.GetSize(); i++) 
       { 
            AfxMessageBox(strArray[i]); 
       } 
    }
    

    So, jetzt kannst du von jeder anderen Funktion auf die WriteArray zugreifen !

    einfach mit :

    ...
    WriteArray()
    ....
    

    Falls es Probleme gibt einfach hier posten ...

    Gruß
    :: NoName ::



  • ok, danke, probier ich gleich morgen mal aus.

    Und kann ich auch direkt auf strArray[0] statt auf WriteArray zugreifen?

    Oder muss ich das dann so in die Klammern machen?
    Also irgendwie so: WriteArray(strArray[0]) oder wie?



  • Ja, dann musst du in der Dlg.h folgendes schreiben :

    private:
    void WriteArray(CString A, CString B, CString C);
    

    Und dann in der CPP:

    void CProgrammDlg::WriteArray(CString A, CString B, CString C)
    {
       CStringArray strArray; 
       strArray.SetSize(3); 
    
       strArray[0] = A;
       strArray[1] = B;
       strArray[2] = C;
    
       for(int i = 0; i < strArray.GetSize(); i++) 
       { 
            AfxMessageBox(strArray[i]); 
       } 
    }
    

    Aufrufen :

    WriteArray("Hallo ", "C++ ", "Programmierer!");
    

    Gruß
    :: NoName ::



  • aber jetzt muss ich ja wissen, wie viele Speicherplätze also Arrays ich brauche, oder nicht? Ok, ich reserviere vielleicht 50 speicherplätze, aber vieleicht werden nicht alle beschrieben.

    Und wie kann ich auf nur z.B. strArray[1] zugreifen, dass er nur strArray[1] z.B. in einem Eingabefeld anzeigt?



  • supersass1 schrieb:

    ...Ok, ich reserviere vielleicht 50 speicherplätze, aber vieleicht werden nicht alle beschrieben.

    Das würde ich nicht machen, soweit ich weiß kann es passieren das in dein Programm ein Speicherfehler entsteht !

    supersass1 schrieb:

    Und wie kann ich auf nur z.B. strArray[1] zugreifen, dass er nur strArray[1] z.B. in einem Eingabefeld anzeigt?

    WriteArray("", "Bla Bla", "");
    

    Gruß
    :: NoName ::



  • also ich möchte mit
    SetDlgItemText(ID_Feld, Variable)
    einen der drei Werte ausgeben, indem ich statt "Variable" da irgendwas mit strArray[0] reinschreibe.



  • Ja, dann beutze es so wie es gemacht habe :

    So muss es dann ausehen :

    void CProgrammDlg::WriteArray(CString A, CString B, CString C)
    {
       CStringArray strArray; 
       strArray.SetSize(3); 
    
       strArray[0] = A;
       strArray[1] = B;
       strArray[2] = C;
    
       for(int i = 0; i < strArray.GetSize(); i++) 
       { 
            SetDlgItemText(ID_DEINER_EDIT_BOX, strArray[i]);
       } 
    }
    

    Und irgendwo in einer anderen Funktion schreibst du es dann so:

    void CProgrammDlg::Test()
    {
        WriteArray("Hier für strArray[0]", "Hier für strArray[1]", "Und hier für strArray[2]");
    }
    

    Gruß
    :: NoName ::


Anmelden zum Antworten