Falsche Ausgabewerte bei sscanf



  • Hallo liebes Formum,

    ich verwende für einer Funktion sscanf, um mir aus einem Datumsstring (yyyy-mm-dd-HH-MM) jeweils die Werte für Jahr, Monat usw. in eine Integer-Variable speichern zu lassen.

    // ConsoleApplication1.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
    //
    
    #include "stdafx.h"
    #include <stdio.h>
    #include <iostream>
    #include <iomanip>
    #include <string>
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	string str = "2012-07-10-10-30";
    	int year=0,month=0,day=0,houre=0,minute=0;
    
    	sscanf_s(str.c_str(),"%i-%i-%i-%i-%i",&year,&month,&day,&houre,&minute);
    
    	cout<<year<<"-"<< setfill('0') << setw(2)<<month<<"-"
    		<<setfill('0') << setw(2)<<day<<"-"
    		<<setfill('0') << setw(2)<<houre<<"-"
    		<<setfill('0') << setw(2)<<minute<<ends;
    
    	system("pause");
    	return 0;
    }
    

    Funktioniert eigentlich.

    2012-07-10-10-30

    Aber immer wenn in einer der Spalten die Zahl 08 oder 09 vorkommt schreibt er in das betroffene Feld und in die dahinterligenden eine 0. Ändert man z.B. im oberen Code das Feld 07 zu 08 erhalte ich:

    2012-00-00-00-00

    Ich kann leider gerade überhaupt nicht nachvollziehen woran das liegen könnte.Ich hoffe das hier jemand eine Idee hat.

    Viele Grüße


  • Mod

    Surprise, surprise: Verwende mal d als format-specifier statt i. Denn i erkennt automatisch die Zahlbasis (anhand Prefix, in diesem Fall 0 für Oktal).
    Also wurde eine Oktalzahl erkannt, und als die 8 gelesen wurde, brach sscanf ab. Daher alles Nullen.

    d hingegen nimmt immer an, dass es sich um Dezimalzahlen handelt.



  • Hallo,

    lies dir mal die Infos zu %i unter scanf durch 😉
    Nimm besser %d...



  • Verflixt,

    ich hab mir schon gedacht dass das Problem viel zu trivial ist. Hab das einfach nicht mehr gesehen

    Danke für die schnelle Hilfe.


Anmelden zum Antworten