Wie Frage ich nach der Uhrzeit? (bin Anfänger)




  • Mod

    Ist zwar wie die Vorposter schon gesagt haben hier fehl am Platze, da C, doch ich verstehe genug C um dir hier helfen zu können:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
    char Uhr[9];  // char ist ein einzelnes Zeichen. Du willst aber wohl mehrere Zeichen nacheinander. Ich nehme mal 8 Zeichen für die Uhrzeit an (hh:mm:ss) + ein weiteres Zeichen für die Nullterminierung bei C-Strings (schlag den Begriff nach, falls dir das nichts sagt).
    printf("Wie spät ist es? : ");
    scanf("%s",&Uhr);
    printf("Es ist %s Uhr!\n\n",Uhr);
    fflush(stdin);
    
    system("PAUSE");
    return 0;
    }
    

    Aber wehe dir, wenn mal jemand mehr als 8 Zeichen eingibt!



  • SeppJ schrieb:

    Ist zwar wie die Vorposter schon gesagt haben hier fehl am Platze, da C, doch ich verstehe genug C um dir hier helfen zu können:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
    char Uhr[9];  // char ist ein einzelnes Zeichen. Du willst aber wohl mehrere Zeichen nacheinander. Ich nehme mal 8 Zeichen für die Uhrzeit an (hh:mm:ss) + ein weiteres Zeichen für die Nullterminierung bei C-Strings (schlag den Begriff nach, falls dir das nichts sagt).
    printf("Wie spät ist es? : ");
    scanf("%s",&Uhr);
    printf("Es ist %s Uhr!\n\n",Uhr);
    fflush(stdin);
    
    system("PAUSE");
    return 0;
    }
    

    Aber wehe dir, wenn mal jemand mehr als 8 Zeichen eingibt!

    okay. danke.
    schönen Tag noch 😉

    PS:.......wegen den 8(oder auch 9) zeichen.
    wenn ich jetzt 10 oder mehr zeichen angebe funktioniert das aber auch.
    wieso das?



  • unskilled schrieb:

    möchtest du C oder C++ programmieren?

    Entschuldigung.
    eigentlich C
    nur ich dacht weil c ja eigentlich fas so wie c++ ist könnte ich das auch hier rein schreiben.
    aber bei nächstenmal mache ich es richtig.
    bin neu hier im forum.
    mfg



  • gabbas1 schrieb:

    unskilled schrieb:

    möchtest du C oder C++ programmieren?

    Entschuldigung.
    eigentlich C
    nur ich dacht weil c ja eigentlich fas so wie c++ ist könnte ich das auch hier rein schreiben.
    aber bei nächstenmal mache ich es richtig.
    bin neu hier im forum.
    mfg

    np - aber es gibt nicht um sonst ein ANSI C Unterforum und ein C++ Unterforum^^ Ehrlich gesagt hab ich aber keine Ahnung, warum es nicht ANSI C und ANSI C++ heißt oder C und C++ - nur bei einem ANSI hinzuschreiben verwirrt imho die meisten anfänger...

    zu den 9 oder 10 Zeichen: Weil es einfach undefiniert ist - vermutlich wirst du aber 15 Zeichen eingeben können, ohne das irgendwas passiert - nur solltest du eben nicht vergessen, dass es undefiniert ist (der eine compiler könnte code erzeugen, der dir deine festplatte formatieren wird und der nächste könnte code erzeugen, mit dem du selbst noch 999 zeichen eingeben könntest)...

    bb



  • Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • char Uhr[9] bedeutet einfach, dass für das Zeichenfeld "Uhr" 9 Zeichen reserviert werden. Funktionen wie printf müssen wissen wann die Zeichenkette zuende ist, also gibt es das '\0'-Zeichen. Deswegen musst du 9 Zeichen für 8 eingetippte Zeichen reservieren, 8 für die Zeichen +1 für das '\0'-Zeichen.

    Wenn du nun mehr dort hineinschreibst, bedeutet das, du schreibst irgendwo hinein. Was auch immer hinter den 9 Zeichen kommt. Das könnte mit etwas Glück ein anderes Programm sein, dann schießt dein Betriebssystem dein Programm ab und redet was von "Segmentation Fault".
    Wenn du Pech hast überschreibst du eine deiner eigenen Variablen und dein Programm macht Blödsinn, weil der Inhalt deiner Variablen nicht mehr stimmt.
    Oder es passiert einfach garnichts, alles funktioniert, du willst es irgendwann vorführen, es stürzt ab.

    Wenn du es richtig machen willst musst du vorher abfragen wie lang der eingegebene Text sein wird, danach entsprechend Speicher besorgen (malloc kann das) (+1 für das Nullzeichen nicht vergessen) und dann klappt auch alles immer, egal wieviele Zeichen eingegeben werden.



  • Die Arraygrenzen sollte man nicht überschreiben. Um sie einzuhalten, gibt es mehrere einfache Möglichkeiten:
    z.B:

    char Uhr[9];
    scanf("%8s", &Uhr); 
    fgets(Uhr, sizeof(Uhr), stdin);
    

    Gruß,
    B.B.



  • Big Brother schrieb:

    D

    char Uhr[9];
    scanf("%8s", &Uhr); 
    fgets(Uhr, sizeof(Uhr), stdin);
    

    Sorry, mir kommt grad so:

    Ist ein in einer array variablen nicht schon eine Adresse gepseichert?
    also müsste das &Uhr bei scanf nicht ein & zuviel sein?

    Ich dachte bisher immer, dass zeiger und arrays insofern "das selbe" sind,
    als dass ich mit dem dereferenzierungoperator * bei einem char array den ganzen string erhalte und bei einem index operator auf nen char* das so-und-so-vielte zeichen, da in der variablen direkt unter dem namen erstmal die adresse steht ... oder ?

    😕



  • branleb schrieb:

    ...also müsste das &Uhr bei scanf nicht ein & zuviel sein?
    ....

    Ja, das & ist zuviel. Wollte nur mal testen, ob es einer merkt.
    🙂



  • nwp2 schrieb:

    char Uhr[9] bedeutet einfach, dass für das Zeichenfeld "Uhr" 9 Zeichen reserviert werden. Funktionen wie printf müssen wissen wann die Zeichenkette zuende ist, also gibt es das '\0'-Zeichen. Deswegen musst du 9 Zeichen für 8 eingetippte Zeichen reservieren, 8 für die Zeichen +1 für das '\0'-Zeichen.

    Wenn du nun mehr dort hineinschreibst, bedeutet das, du schreibst irgendwo hinein. Was auch immer hinter den 9 Zeichen kommt. Das könnte mit etwas Glück ein anderes Programm sein, dann schießt dein Betriebssystem dein Programm ab und redet was von "Segmentation Fault".
    Wenn du Pech hast überschreibst du eine deiner eigenen Variablen und dein Programm macht Blödsinn, weil der Inhalt deiner Variablen nicht mehr stimmt.
    Oder es passiert einfach garnichts, alles funktioniert, du willst es irgendwann vorführen, es stürzt ab.

    Wenn du es richtig machen willst musst du vorher abfragen wie lang der eingegebene Text sein wird, danach entsprechend Speicher besorgen (malloc kann das) (+1 für das Nullzeichen nicht vergessen) und dann klappt auch alles immer, egal wieviele Zeichen eingegeben werden.

    Okay.
    ich merk's mir 😉


Anmelden zum Antworten