Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Speicherschrott?

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 <
000
22.05.2006, 13:40 Uhr
Stephi



Hallo Welt!
Wieder mal ich. Also das folgende programm läuft ja eigentlich ganz gut. Mein einziges problem ist, dass er bei der Ausgabe der Wörter immer eine Menge Speicherschrott ausspuckt!
Es sollte so gehen, dass er falls die einzige Eingabe set oder add oder wie auch immer lautet einfach nur Aúsgeben SET: (und hiér nichts, anstelle von Speicherschrott! ;-P)
Was mache ich falsch?
Gruß Stephi


Code:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define _NOP 99
#define length 81

int CheckSchluessel(char *AszSchluesselwoerter[], char *szTempstr, int dim)
{
    int i=0, iValue=_NOP;

    for (i=0; i<dim; i++)
    {
        if (strncmp(szTempstr, AszSchluesselwoerter[i], strlen(AszSchluesselwoerter[i]))==0)
            iValue=i;
    }
    return iValue;
}
    


int main ()
{
    typedef enum {EXIT, SET, ADD, SUB, MUL, DIV, NOP=_NOP}KEY;
    char szTempstr[length];
    char *AszSchluesselWoerter[]={"exit", "set", "add", "sub", "mul", "div"};
    int dim =6, i=0;
    KEY input=EXIT;

    printf("***************************************************************\n");
    printf("                      Schluessel                               \n");
    printf("***************************************************************\n");

    do
    {
        printf("\nGeben Sie das Schluesselwort(-woerter) ein!\n");
        gets(szTempstr);
        

        input=(KEY)CheckSchluessel(AszSchluesselWoerter, szTempstr, dim);


        switch(input)
        {
        case EXIT: printf("\nExit Program\n");exit;
            break;

        case SET: printf("\nSET:");
            for
                (i=4;i<length && szTempstr[i]!=0;i++)
                printf("%c", szTempstr[i]);
            break;

        case ADD: printf("\nADD:");
            for (i=4; i<length && szTempstr[i]!=0;i++)
                printf("%c", szTempstr[i]);
            break;

        case SUB: printf("\nSUB:");
            for (i=4;i<length && szTempstr[i]!=0;i++)
                printf("%c", szTempstr[i]);
                break;

        case MUL: printf("\nMUL:");
            for (i=4;i <length && szTempstr[i] !=0;i++)
                printf("%c", szTempstr[i]);
            break;

        case DIV: printf("\nDIV:");
            for (i=4; i<length && szTempstr[i] !=0; i++)
                printf("%c", szTempstr[i]);
            break;

        case NOP: printf("Nichts erkannt\n");
            break;
        }
    }
    while (input != EXIT);
return 0;
}


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.05.2006, 14:10 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Also das Programm muss man erstmal verdauen


C++:
case SET: printf("\nSET:");
            for
                (i=4;i<length && szTempstr[i]!=0;i++)
                printf("%c", szTempstr[i]);
            break;


in den Zweig kommt man nur wenn man vorher Set eigegeben hat. D.h. in szTempstr stehen 3 Zeichen + binärer Null. Der Rest dahinter ist zufällig. Bei deiner for Schleife fängst du aber erst bei dem 5. Zeichen an zu prüfen ob eine binäre Null auftritt, also werden die gesamten 81 Zeichen ausgegeben.

Warum gibst du eigentlich jedes Zeichen einzeln aus anstatt %s zu verwenden?

Dieser Post wurde am 22.05.2006 um 14:11 Uhr von Guybrush Threepwood editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.05.2006, 15:23 Uhr
~Stephi
Gast


Oh hast recht mit s is viel besser is ja bescheuert
Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: