Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Eingabe und dann berechnen

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
13.09.2006, 16:08 Uhr
KFC Embryo
Ein Huhn


Hi,

ich würde gerne bei folgendem Programm, durch eine flexibele Eingabe, die 3 Ziffern des Nummernschildes bestimmen.
Habe da nur ein leichtes "wirr warr"


C++:

#include <time.h>
#include <stdio.h>
#include <stdlib.h>

int isprimzahl(unsigned int x)
{
        unsigned int y;
        
if(x<=1) return 0;
        
for(y=2; y < floor(sqrt(x));++y)
    (x%y==0);{        
        return 0;
        }

        return 1;
    }
        
void printkandidaten(unsigned int x)
{

    char z,y ;
    char zwisch [3];
    
    
    if (x < 100 || x > 999){
        return;
}

    zwisch[2]='\0';
        
        for (z = 'A'; z <='Z'; ++z){
            for(y= 'A'; y<='Z'; ++y){
            zwisch[0]=z;
            zwisch[1]=y;
        
            if (!strcmp(zwisch,"SS"))
            continue;
    
            printf("MA-%s %i\n", zwisch, x);
        }
    }
}
void print_time(void) {
               time_t zeit;
            time(&zeit);
               printf("Aktuelle Systemzeit: ");
               printf("%s\n",ctime(&zeit));
}

const char p[] = {"test"};
int check_passwort(char passw[]) {
           int i, n = sizeof(p) / sizeof(char);
          
           for(i=0; i<n; ++i)
               if (passw[i] != p[i])
                   return 0;
               else
                   return 1;
}

int main(void)
{

    char name[20], passwort[10];
    
    printf("Bitte Name eingeben --> ");
    fgets (name,20,stdin);
    printf("Bitte Passwort eingeben --> ");
    fgets(passwort,10,stdin);
    
    
    if( check_passwort(passwort) == 1){
            printf("Guten Tag Herr %s", name);
            printkandidaten(111);
            print_time();
}    
    else
          printf("Du kommst hier nicht rein\n");
           return EXIT_SUCCESS;


}



    




danke
--
An nescis, mi fili, quantilla prudentia mundus regatur?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.09.2006, 16:12 Uhr
Blubber2063



Und was genau willst du jetzt von uns wissen ? Mir fällt grad noch auf du hast da ein kleines Verbrechen begangen du hast den Parameter der funktion x genannt und dann eine Variable in der gleichen Funktion mit x benannt.
Dieser Post wurde am 13.09.2006 um 16:15 Uhr von Blubber2063 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.09.2006, 16:13 Uhr
Pablo
Supertux
(Operator)


Hab nur Paar Kommentare, eine Frage konnte in deinem Beitrag nicht finden, also weiß ich nicht genau, was du willst:

1. Um die Länge eines Strings zu ermitteln, benutzt man die Funktion strlen(3) (definiert in string.h), denn sizeof(p) liefert die Anzahl von Bytes, die p benötigt, und wenn p mal kein char[] = ... sondern ein char* ist, dann ist sizeof(p) != strlen(p)

2. Um 2 Strings auf Gleichheit zu prüfen, benutzt man die Funktion strcmp(3) (definiert in string.h).

Ein Problem in deiner Funktion check_passwort: was passiert, wenn die Länge von p größer als die Länge von passw? Denk mal drüber nach.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 13.09.2006 um 16:17 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
13.09.2006, 16:16 Uhr
KFC Embryo
Ein Huhn


Bei der Funktion Printkandidaten steht 111 drin aber auch nur weil ich es im Queltext eingegeben habe, ich möchte dies aber durch eine Abfrage wie zum Beispiel fgets() oder scanf erreichen.
Das die Eingabe flexibel ist
--
An nescis, mi fili, quantilla prudentia mundus regatur?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
13.09.2006, 16:30 Uhr
Blubber2063



Dann machs doch, die passende Funktion hast du doch mit Scanf schon selbst genannt. Dein 2. Punkt Pablo ist noch viel schlimmer, denn da er das Feld an eine Funktion übergibt ist es nur noch ein Pointer, also funktioniert das sizeof dafür nicht mehr richtig. Aber das mit der char variable x und dem unsigned int parameter x solltest du beseitigen, ich bin erstaunt das der compiler das einfach so schluckt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
13.09.2006, 16:34 Uhr
KFC Embryo
Ein Huhn


Das läuft aber einwandfrei.
Kann ich scanf dafür verwenden bekomme ich dann keine Probleme, weil scanf immer nur bis zum ersten Leerzeichen kopiert oder?
Gibt es eine Möglichkeit das Problem mit fgets zu lösen?

gruss
--
An nescis, mi fili, quantilla prudentia mundus regatur?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
13.09.2006, 16:38 Uhr
Blubber2063



Ja du kannst es mit fgets lösen, dann musst du danach die Funktion atoi, bzw atol auf den gelesenen String anwenden.atoi für integer und atol für long werte. Oder du schreibst dir ne passende Funktion für deine Typgröße selber, dauert ja in die Richtung nicht lang.

Edit: Hatte mich wegen dem x auch vertan, war das z, nicht richtig gelesen^^.

Dieser Post wurde am 13.09.2006 um 16:39 Uhr von Blubber2063 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
13.09.2006, 18:16 Uhr
KFC Embryo
Ein Huhn


Danke für die Hilfe

gruss
--
An nescis, mi fili, quantilla prudentia mundus regatur?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
13.09.2006, 18:43 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


wobei atoi relativ unbefriedigend ist weil auch 0 raus kommt wenn schrot drin steht... für sowas gibts sscanf oder strtod und Konsorten...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
13.09.2006, 20:29 Uhr
KFC Embryo
Ein Huhn


Mir kam gerade noch eine Idee, die ist zwar trivial aber müsste gehen, oder?

Wenn ich hingehe und die Funktion printkanditaten einfach dahin gehend verändere, dass sie nur noch zwei char Werte initialisieren kann, sprich nur noch MA-RR-(also 4 char werte) ausgibt.

Ich schreibe dann eine neue Funktion die es ermöglicht 3 Ziffern einzugeben und sie dann später unter main in der Funktion printf zusammen führe, was die Notation ja erlaubt.

Würde das Funktionieren?

gruss
--
An nescis, mi fili, quantilla prudentia mundus regatur?
 
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: