Newbie-Action



  • Hi ihr. Ich habe heute angefangen in C zu programmieren und hab da ne frage. Ich gehe gerade ein Tutorial durch, und hier ist ne aufgabe zu lösen, bei der man Text addieren soll... Aber hier kommt immer wieder die meldung bei "gcc" Speicherzugriffsfehler. Was soll ich tun? Hier der Code

    /*
        Hausaufgabe3: Einlesen von Texten die addiert werden
    */
    
    #include <stdio.h>
    
    void main (void)
    {
    
        char text1, text2, text3;
    
        printf("\nBitte geben Sie zwei durch ein Komma getrennte Textabschnitte ein: ");
        scanf("%s,%s", &text1, &text2);
    
        text3 = text1 + text2;
        printf("\n\n%s + %s = %s\n\n", text1, text2, text3);
    
    }
    

    Bitte helft mir bei meinem kleinen Problem.

    Vielen Dank Eldelio



  • Hi,

    %s ist fuer Zeichenketten. Du liest aber nur einzelne Zeichen ein. Es muss
    also %c heissen.

    Ansonsten gibt es nur noch zu sagen, dass es 'void main (...)' nicht gibt.
    Das ist falsch und es muss 'int main (...)' heissen. Am Ende der main-Funktion
    kommt dann noch ein 'return 0;' hin.

    mfg
    v R



  • Ich verschiebe dich mal in das C Forum, da es ein ISO C Problem ist und nicht direkt etwas mit Linux zu tun hat.



  • danke für den tipp mit void.

    Ich dachte vorher aber es muss %s heißen, da ich als erstes %c probierte, dieser aber, wenn ich z.b. zweimal "hallo" eingebe folgendes ausgibt:

    H + = \

    Bitte helft. Eldelio



  • das ist ganz klar warum:

    ein char ist ein einzelnes zeichen. du speicherst also schon mal keine zeichenkette, sondern nur ein einzelnes zeichen. es müsste vielmehr in der deklaration heissen (z.b.) char text1[50]; damit du ein char array der größe 50 hast.
    weiter unten dann der nächste "fehler" (in " weil es kein wirklicher fehler ist):
    mit text1 = text2 + text3; addierst du die (ascii) werte von text2 und 3 auf und speicherst in text1. wenn vorher in text2 ein 'A' war und in text3 ein 'B' dann steht in text1 jetzt das ascii zeichen zum wert 123 (A = 61, B = 62, glaub das stimmt) und das ist dann irgenwas mit / * oder so.

    merke: unterschied zwischen zeichen und zeichenkette 😃



  • "hallo" ungleich EIN ZEICHEN!
    wenn du nur ein Zeichen erwartest, werden nicht fünf gespeichert.

    du kannst durchaus mit %s arbeiten. Aber dann brauchst du auch ein
    string (Char-Array) und kein einzelner Char...

    also :
    char text1[1000]; /* maximal einzugebende Zeichen !!! */

    [EDIT]
    Da war einer schneller 🙂

    [ Dieser Beitrag wurde am 12.12.2002 um 22:00 Uhr von Solaris'dUKe editiert. ]



  • Und was soll ich jetzt dann machen?!

    Wie kann ich die jetzt addieren?
    muss ich zu den char variablen in der deklaration ein [50] zu jedem hinzufügen?

    Eldelio



  • oh cool, ne neue fehlermeldung:

    ha3.c: In function `main':
    ha3.c:17: invalid operands to binary +

    was ist etz?!

    Eldelio



  • hach diese newbies sind immer total süß 😃



  • ja ne... 😉

    Immer diese NEwbies...

    Dann hilf du mir, wenn dus kannst...
    Bitte!!!!!!!!!

    Eldelio



  • Kann dir auch nicht helfen, da ich zu faul bin dein Problem zu verstehen und zu beheben. :p
    Aber immer mit der Ruhe. Ist ja ne ganz einfache Sache. Hab ein bisschen Geduld, hilfe kommt gleich. 🙂 🙂 🙂 🙂





  • @Kingruedi:

    Und du meinst, das ist das richtige für einen Anfänger? 😕



  • Hi,

    also ich nehme mal an, dass du die beiden Strings aneinanderhaengen willst:

    String1: "hallo"
    String2: " welt"
    und String3 soll dann: "hallo welt" werden.

    Dafuer kannst du die strcat-Funktion nutzen:

    char   String1[25] = "hallo ";
    char   String2[25] = "welt"; 
    char   String3[50];
    
           strcpy ( String3, String1 ); /*String1 in String3 kopieren
                                          String3 jetzt -> "hallo "*/
           strcat ( String3, String2 ); /*String2 an String3 anhaengen
                                          String3 ist jetzt -> "hallo welt"*/
    
    printf ( "%s", String3 );
    

    Wenn du das mit Eingaben machen willst, musst du aufpassen, dass du nicht mehr
    Zeichen einliesst, als das Array aufnehmen kann, sonst schreibst du ueber den
    reservierten Speicher hinaus in irgendwelche Speicherstellen, die u. U. nicht
    dir gehoeren.

    mfg
    v R



  • Original erstellt von D1BAKEL:
    Und du meinst, das ist das richtige für einen Anfänger? 😕

    Vielleicht nicht wirklich, aber ich hatte keinen Link zu einem vernünftigen Tutorial.



  • schon okay... 🙄


Anmelden zum Antworten