Datum formatieren



  • ich möchte ein Datum einlesen mit:

    char ein;
    printf("Geben Sie ein Datum ein:");
    gets(ein);

    wenn der benutzer als Beispiel 02.02.2004 eingibt is alles wunderbar, wenn er 2.2.04 eingibt soll er es zu 02.02.2004 umwandeln und am besten wieder in "ein" speichern. wie kann ich das realisieren. Es sollen nur diese beiden varianten möglich sein. 😕

    3 std hirnbrei...und ich komm einfach nich drauf. und dauernt tastatur essen macht keinen spaß mehr.



  • kannst z.b. mir scanf einlesen und dann bei der ausgabe checken ob die jeweilige zahl nur einstellig ist und dann vorher ne null vorne ausgeben...



  • Oder so:

    int tag,monat,jahr;
    char* buffer="02.03.2005";
    
    sscanf(buffer,"%d.%d.%d",&tag,&monat,&jahr);
    

    da kann man dann auch so Sachen wie

    char* buffer="2.3.2005";
    

    benutzen;



  • ich hab doch noch nie mit sscanf gearbeitet....ich hab davon keinen plan.



  • Da gibt es genügend Informationsquellen dazu. Musst halt mal schauen. Was Du benötigst, steht oben.



  • ok, ich habs jetzt einigermaße gerafft mit dem sscanf.

    hab jetzt ein anderes problem.

    ich habe also einen char "tag".

    in dem wurde jetzt eine 2 gespeichert.

    wie kann ich jetzt eine 0 vorr die 2 schreiben.

    mir schwebt da etwas mit strcat im kopf rum.

    _tag = {'0'};
    strcat(_tag, tag);
    tag=_tag;
    

    [EDIT das geht wohl nich so wie ich mir das vorgestellt habe, ich muss wohl strings mit strcpy(); kopieren...:(
    geht sowas?

    weil als beispiel hab ich sowas vor mir:

    char string[50]="blabla";
    printf("%s\n",strcat (string, " = jaja "));



  • Ich glaube, da nimmst du lieber sprintf:

    int Zahl=10;
    	char szZahl[3];
    
    	Zahl<10?sprintf(szZahl,"0%d",Zahl):sprintf(szZahl,"%d",Zahl);
    


  • jo, das is ok, aber ich möchte einen null vor die 2 speichern. und ich hab vorher auf einer dieser variablen gespeichert:

    sscanf(buffer1,"%d.%d.%d",&tag,&monat,&jahr);

    wenn also in tag nur eine 2 steht, dann soll er einen 0 davor machen. sodass 02 drin steht.

    wäre toll wenn mir einer sagen könnte wie das geht 😞

    es geht mir, zum 100'ten mal, ums speichern!!!



  • Kennst du if? Ja.
    Kennst du Schleifen? Ich hoffe ja.
    Jetzt brauchst du nur noch davon gebrauch machen, indem du prüfst, ob zwischen zwei Punkten weniger als 2 Zahlen (char's) sind. Wenn ja, kannst du eine 0 vor die bereits vorhandene Zahl einfügen. Möglicherweise findest du das hilfreich. 🙂



  • wie kann ich testen ob ne zahl im string größer als 31 ist???

    PS: ich hab schhon ne schleife due teste das ganz gut.



  • so ihr papnasen ^^, muss ich alles alleine machen...-.-

    ich muss aber dem bob danken, sein vorschlag am anfang hat mich am ende doch noch auf ne vernünftige lösunge gebracht 🙂

    ich muss das jetzt noch en bissle ummodeln das es total fehlerfrei funtzt, aber ansonsten is das grobe geschafft.

    hier der quelli:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <conio.h>
    #include <ctype.h>
    #include <time.h>
    #include <stdio.h>
    
    int main(void)
    {
    
    	//FILE * fp;
    	int teststring,i=0;
    	int tag,monat,jahr;
    	int _tag=1,_monat=1,_jahr=1;
    	char buffer1[11],test='j';
    
    	while(test=='j')
    	{
    		system("cls");
    		teststring=1;
    
    		_tag=_monat=_jahr=1;
    
        if(teststring==1) 
        { 
            printf("Geben Sie ein Datum ein:");
    
    		scanf("%s",&buffer1);;//scanf("%s",&buffer1); 
    
    		if((( (buffer1[i] =='.' || (buffer1[i]>=48 && buffer1[i]<57))) && buffer1[i] !='\0')) 
            { 
    
            i++; 
            }else if(buffer1[i] != '\0') 
            { 
    
                teststring=0; 
            }else 
            { 
    
                teststring=0; 
        } 
        } 
    
        // =============== Umschreiben in tag, monat, jahr =========================
    
    	sscanf(buffer1,"%d.%d.%d",&tag,&monat,&jahr); 
    
    	// =========================================================================
    
    	if(tag<1 || tag>31)			// TEST auf TAG
        { 
    
    		_tag=0;
        } 
    
        if (monat<1 || monat >12)	// TEST auf MONAT
        { 
    
    		_monat=0;
        } 
    
        if(jahr>4) 
        { 
            jahr=1900+jahr; 
        }else jahr=2000+jahr; 
    
        if(jahr>2004 || jahr<1905)	// TEST auf JAHR
    	{
    
    		_jahr=0;
    	}
    
    	// ---------------------------------------------------------------
    
    	if(_tag !=0 && _monat !=0  && _jahr !=0) // AUSGABE wenn alle Eingaben gültig
    	{
        printf("\n\t\tIhr Datum: %.2i.%.2i.%.2i",tag,monat,jahr); 
    	printf("\n\nWiederholen? (j/n) \n");
    
    	test=_getch();
    
    	}else 
    	{
    		printf("Eingabe ungueltig\n");
    		getch();
    	}	
    	}
    }
    

    wer noch kreative vorschläge hat, immer her damit ... 😃

    PS: was haltet ihr von der kreativen idee einfach nullen vor die zahl ausgeben zu lassen :D, ich find das is echt ne geile idee von mir gewesen.



  • wie kann ich aus einer test.txt datei folgende daten auslesen und ausgeben:

    als Beispiel:

    01.01.2004
    .
    .
    .
    usw



  • @Krugmann

    FILE *fp;
    char zeile[1024];
    
    fp = fopen("datei.dat", "r");
    if(fp)
    {
       while(fgets(zeile, 1024, fp))
       {
          printf("%s", zeile);
       }
    
       fclose(fp);
    }
    

    Viel Spaß!

    Übrigens gibt es in der FAQ des Konsolenforums super Alternativen zu system("CLS"). Oder bist du auch so einer, der mit Kanonen auf Spatzen schießt?? Außerdem ist der Konsolenbefehl CLS, den du ja mit system() aufrufst, nicht immer kompatibel (nur zur Info).



  • also ich hab nix gefunden...kannst mir vielleicht nen link geben? (nicht unbedingt auf english) :>

    was is an CLS so schlimm, das hab ich früher immer in dos verwendet. außerdem isses ganz schnell geschrieben..system("cls"); ...blubb,fertig ^^



  • Krugman schrieb:

    also ich hab nix gefunden...kannst mir vielleicht nen link geben? (nicht unbedingt auf english) :>

    was is an CLS so schlimm, das hab ich früher immer in dos verwendet. außerdem isses ganz schnell geschrieben..system("cls"); ...blubb,fertig ^^

    CLS ist ein Konsolenbefehl in Windows, dahingehend unbrauchbar auf Systemen, die CLS nicht verstehen.

    clrscr() (include conio.h; kein ANSI-C) ist übrigens auch schnell geschrieben 😉 und es ist um längen sicherer und schneller.
    Ansonsten gibt es noch die Improved Console in der Konsolen-FAQ.
    Das Bildschirmlöschen ist übrigens betriebssystemabhängig, d. h. du musst wahrscheinlich für jedes System eine systemeigene Funktion aufrufen, falls du dein Programm portieren willst.


Anmelden zum Antworten