Ergebnis 1 bis 9 von 9
  1. #1
    W32.FunLove Avatar von Daywa1k3r
    Registriert seit
    28.09.2008
    Beiträge
    139

    Standard C Aufgabe - Benötige Hilfe

    Hi,

    ich möchte meine Quellcode vor DAU's absichern, unzwar dürfen die Argumente beim Start des Programmes (Kommandozeilenparameter)
    keine Strings bzw. Chars enthalten, also nur numerische Werte dürfen mitgegeben werden.

    Am Ende des folgenden Quellcodes ist ein Versuch von mir, welcher leider nicht das gewünscht Ergebnis liefert.
    Hat jemand einen Tipp oder Lösungsvorschlag? Ich stelle mir vor, dass ich die übergeben Parameter durchlaufen und auf Chars überprüfe, aber wie ?



    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <limits.h>
    
    #define ANZ_ZUF 6
    #define MAX_WUERFEL 1000
    #define MAX_AUGENZAHL 1000
    
    
    
    void zufall_init();
    int checkargus(char *argv[]);
    int zufallszahl(int max);
    
    
    int main(int argc, char *argv[]){
    
        int i, err, err2,maxw, zaehler;
        zufall_init();
    
    
    /*    for(i=0;i< 10;i++)
            {
                printf("aRG. %i: %s\n",i,argv[i]);
                isNumber(argv[i]);
            }*/
    
    
    
        if(argc == 3)
        {
    
            err= checkargus(&argv[0]);
            if(err==0)
            {
                maxw = atoi(argv[2]);
                zaehler= atoi(argv[1]);
                //err= checkargus(&argv[2]);
                printf("Das Programm lautet: %s\n",argv[0]);
    
                for(i=0; i<zaehler ;i++)
                    printf("Die %i. Zahl ist: %i\n", i+1, zufallszahl(maxw));
            }else if(err==1)
                printf("Fehlerhafte Parameter!\n");
    
        }else
        {
                printf("Fehlerhafte Parameter!\n");
        }
    
    }
    
    
    void zufall_init(){
        time_t t;
        time(&t);
        srand((unsigned int) t);
    }
    
    int zufallszahl(int max){
        return rand() % max;
    }
    
    int checkargus(char *argv[])
    {
        int argument1;
        int argument2;
    
        argument1 = atoi(argv[1]);
    //    argument2 = atoi((*(argv + 2)));
        argument2 = atoi(argv[2]);
    
        int i,x,y;
    
        if((argument1  <= MAX_WUERFEL) && (argument1  > 0)){
            if((argument2  < MAX_AUGENZAHL ) && (argument2  > 0))
                return 0;
    
        }
        else
            return 1;
    }
    
    
    /*{
            for(i=0; i<=x ;i++)
                {
                    if((x > 0) && (x <=9))
                            return 1;
                    if((y > 0) && (y <=9))
                        return 1;
                    else
                        return 0;
                }
            return 0;
        }*/

  2. #2
    Michelangelo Virus Avatar von Nookie
    Registriert seit
    25.09.2007
    Beiträge
    284

    Standard AW: C Aufgabe - Benötige Hilfe

    Aloha

    Also als erstens brauchst du die Anzahl der Parameter im Array.
    Mit C musst du das etwas umständlich machen:

    Code:
    //Grösse eines einzelnen Elementes in Byte durch die grösse des gesamten Array teilen um die Länge des Arrays zu berechnen:
    int lenght = sizeof(a) / sizeof(a[0]);
    Danach solltest du mit die einzelnen werte durch diese Funktion jagen können um zu prüfen ob sie numerisch sind:

    Code:
    bool isnumeric(string st) {
        int len = st.length();
        for (int i = 0; i < len; i++) {
            if (int(st[i])<48 || int(st[i]) > 57) {
                return false;
            }
        }
         return true;   
    }
    Ich hoffe du kriegst dein Programm damit zum laufen

  3. #3
    Fortgeschrittener
    Registriert seit
    08.04.2015
    Beiträge
    32

    Standard AW: C Aufgabe - Benötige Hilfe

    Oder einfach den C String mit strtol umwandeln und endptr überprüfen ;-)

    strtol(3):
    ...
    If endptr is not NULL, strtol() stores the address of the first
    invalid character in *endptr. If there were no digits at all,
    strtol() stores the original value of nptr in *endptr (and returns
    0). In particular, if *nptr is not '\0' but **endptr is '\0' on
    return, the entire string is valid.
    ...

  4. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    Daywa1k3r (11.05.2015), Nookie (11.05.2015)

  5. #4
    Fortgeschrittener
    Registriert seit
    10.06.2012
    Beiträge
    36

    Standard AW: C Aufgabe - Benötige Hilfe

    Zitat Zitat von Nookie Beitrag anzeigen
    Aloha

    Also als erstens brauchst du die Anzahl der Parameter im Array.
    Mit C musst du das etwas umständlich machen:

    Code:
    //Grösse eines einzelnen Elementes in Byte durch die grösse des gesamten Array teilen um die Länge des Arrays zu berechnen:
    int lenght = sizeof(a) / sizeof(a[0]);
    Das funktioniert nur, wenn das Array im selben Codeblock initialisiert wurde. Wenn du das Array an eine Funktion übergibst, z.B. myFunc(char *array) funktioniert das ganze nicht mehr. Wenn das Array als Parameter übergeben wird ist sizeof(a) == sizeof(char*). In dem Fall müsstest du die Länge immer noch als 2. Paramter an die Funktion übergeben: void myFunc(char *array, size_t len)

    Zitat Zitat von Nookie Beitrag anzeigen
    Danach solltest du mit die einzelnen werte durch diese Funktion jagen können um zu prüfen ob sie numerisch sind:

    Code:
    bool isnumeric(string st) {
        int len = st.length();
        for (int i = 0; i < len; i++) {
            if (int(st[i])<48 || int(st[i]) > 57) {
                return false;
            }
        }
         return true;   
    }
    Ich hoffe du kriegst dein Programm damit zum laufen
    bool gehört nicht zum C Wortschatz, string auch nicht. Dafür benutzt man in C int und char*
    st.length() gibt es auch nicht. strlen() ist die Funktion, die du suchst.
    Typecast in C sieht ein klein wenig anders aus: "(int)st[i]<48" wobei man in dem Fall nicht casten muss, da man int und char direkt vergleichen kann
    In C99 würde deine Funktion so aussehen:
    Code:
    int isnumeric(char *st) {
        int len = strlen(st);
        int i ;
        for (i = 0; i < len; i++) {
            if (st[i]<48 || st[i] > 57) {
                return 0;
            }
        }
         return 1;   
    }
    Geändert von R3s1stanc3 (11.05.2015 um 20:47 Uhr)

  6. #5
    Fortgeschrittener
    Registriert seit
    08.04.2015
    Beiträge
    32

    Standard AW: C Aufgabe - Benötige Hilfe

    mit c99 wäre auch die variablen deklaration in der schleife konform.. was dem zweck mehr entsprechen würde als außerhalb

  7. #6
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.352

    Standard AW: C Aufgabe - Benötige Hilfe

    Zitat Zitat von R3s1stanc3 Beitrag anzeigen
    bool gehört nicht zum C Wortschatz
    Code:
    #include <stdbool.h>
    P.S.: hatte den Code schon getippt, bevor ich die Antwort von rax gelesen hatte. Wäre schade, den jetzt einfach wegschmeißen zu müssen, also:
    Code:
    #include <stdlib.h>
    #include <stdio.h>
    
    int main(int argc, char *argv[])
    {
    	int i, x;
    	char *p;
    	for(i = 1; i < argc; i++)
    	{
    		x = strtol(argv[i], &p, 10);
    		if (*p)
    			printf("(str arg) '%s'\n", argv[i]);
    		else
    			printf("(int arg) %d\n", x);
    	}
    	return 0;
    }

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

  8. #7
    Michelangelo Virus Avatar von Nookie
    Registriert seit
    25.09.2007
    Beiträge
    284

    Standard AW: C Aufgabe - Benötige Hilfe

    Zitat Zitat von R3s1stanc3 Beitrag anzeigen
    bool gehört nicht zum C Wortschatz, string auch nicht. Dafür benutzt man in C int und char*
    st.length() gibt es auch nicht. strlen() ist die Funktion, die du suchst.
    Typecast in C sieht ein klein wenig anders aus: "(int)st[i]<48" wobei man in dem Fall nicht casten muss, da man int und char direkt vergleichen kann
    Ich sollte mach mal wider mit Hardwarenäheren sprachen befassen... :/

  9. #8
    W32.FunLove Avatar von Daywa1k3r
    Registriert seit
    28.09.2008
    Beiträge
    139

    Standard AW: C Aufgabe - Benötige Hilfe

    Bin jetzt auch zum Ergebnis bekommen mit dem Hinweis von rax. Mein Quelltext sieht so ähnlich aus wie der von blackberry.

    Danke euch!

  10. #9
    Transpinguin Avatar von IRET
    Registriert seit
    02.09.2008
    Beiträge
    1.295

    Standard AW: C Aufgabe - Benötige Hilfe

    Zitat Zitat von Nookie Beitrag anzeigen
    Aloha

    Also als erstens brauchst du die Anzahl der Parameter im Array.
    Mit C musst du das etwas umständlich machen:

    Code:
    //Grösse eines einzelnen Elementes in Byte durch die grösse des gesamten Array teilen um die Länge des Arrays zu berechnen:
    int lenght = sizeof(a) / sizeof(a[0]);
    Danach solltest du mit die einzelnen werte durch diese Funktion jagen können um zu prüfen ob sie numerisch sind:

    Code:
    bool isnumeric(string st) {
        int len = st.length();
        for (int i = 0; i < len; i++) {
            if (int(st[i])<48 || int(st[i]) > 57) {
                return false;
            }
        }
         return true;   
    }
    Ich hoffe du kriegst dein Programm damit zum laufen
    Einfach argc für die Anzahl nehmen.

Ähnliche Themen

  1. [Benötige Hilfe] Truecrypt
    Von Pixelz im Forum Sicherheit
    Antworten: 10
    Letzter Beitrag: 12.07.2010, 07:43
  2. Benötige Photoshop Hilfe - 15 Min.
    Von freezer im Forum GFX Angebote & Wünsche
    Antworten: 13
    Letzter Beitrag: 02.05.2010, 11:10
  3. Benötige Hilfe bei Flash/Actionscript
    Von Razorigga im Forum Sonstige Programmiersprachen
    Antworten: 2
    Letzter Beitrag: 01.08.2009, 13:20
  4. Benötige Hilfe
    Von D4Rk im Forum Windows
    Antworten: 5
    Letzter Beitrag: 04.07.2009, 17:01
  5. Benötige Hilfe
    Von chronixos im Forum Hardware
    Antworten: 5
    Letzter Beitrag: 26.11.2007, 14:39

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  
crypt.blue