PDA

View Full Version : مبتدی: در مورد sscanf



smemamian
چهارشنبه 29 آذر 1391, 00:08 صبح
سلام دوستان

در یک جا کلاس تاریخ رو نوشته بودن که من قسمت sscanf رو نفهمیدم چی کار می کنه !
این c* یا d% کارش چیه ؟ شبیه زبان سی هس ! چند نمونه مشابه این c* یا d% و ...
داریم ؟
و نکته ای که هست اینه که وقتی ماه mydataرو 09 می نویسم کامپایلر خطا می گیره !

#include <cstdlib>
#include <iostream>
#include <stdio.h>
using namespace std;
class data {

int y,m,d ;
public :
data (char *str);
data (int i ,int j ,int k) {

y = i ;
m = j ;
d = k ;
}
void get() {
cout << y << "/" << m << "/" << d << endl ;
}
};
data::data(char *str)
{
sscanf(str,"%d%*c%d%*c%d" , &y,&m ,&d) ;
}
int main(int argc, char *argv[])
{
data mydata(1391,09,29);
data smydata("1391/09/29");
mydata.get() ;
smydata.get() ;
cout << "\n" ;
system("PAUSE");
return EXIT_SUCCESS;
}

omidshaman
چهارشنبه 29 آذر 1391, 11:12 صبح
و نکته ای که هست اینه که وقتی ماه mydataرو 09 می نویسم کامپایلر خطا می گیره !
چون توی c , C++‎‎ اعدادی که یک 0 قبلشونه octal نامبر حساب میشن(یعنی در مبنا 8) و چون تو مبنا 8 نه نداریم ارور میده

این c* یا d% کارش چیه ؟ شبیه زبان سی هس ! چند نمونه مشابه این c* یا d% و .
sscanf شبیه scanf کار می کنه با این تفاوت که ورودیش از یک string میاد
وقتی * میاد قبل d توی scan ,scanf یعنی اون مقدار خونده بشه ولی ignore بشه و کاری باهاش انجام نشه یعنی حالا مثلا اگر %*s بود یعنی یک string ignore بشه
شبیه زبان c نیست sscanf مال c ه دیگه اینا خود c ان!
کلشون این جا هستن
http://www.cplusplus.com/reference/cstdio/printf/
http://www.cplusplus.com/reference/cstdio/scanf/

omidshaman
چهارشنبه 29 آذر 1391, 11:36 صبح
اصولا بهتره از c و C++‎‎‎ با هم استفاده نشه این برنامه شما بصورت C++‎‎‎ خالص

#include <iostream>
#include <sstream>
using namespace std;
class data
{
public :
data (string str);
data (int i ,int j ,int k);
void get(void) ;
private :
int y,m,d ;
};

data::data(int i ,int j ,int k)
{
y = i ;
m = j ;
d = k ;
}
data::data(string str)
{
stringstream a(str);
a>>y;
a.ignore();//ignore /
a>>m;
a.ignore();//ignore /
a>>d;
}

void data::get()
{
cout << y << "/" << m << "/" << d << endl ;
}
int main(int argc, char *argv[])
{
data mydata(1391,9,21);
data smydata("1391/09/29");
mydata.get() ;
smydata.get() ;
cout << "\n" ;
return 0;
}

smemamian
پنج شنبه 30 آذر 1391, 21:33 عصر
چون توی c , C++‎‎‎ اعدادی که یک 0 قبلشونه octal نامبر حساب میشن(یعنی در مبنا 8) و چون تو مبنا 8 نه نداریم ارور میده

خب برای حل اون باید چی کار کرد ؟

omidshaman
پنج شنبه 30 آذر 1391, 23:23 عصر
خب برای حل اون باید چی کار کرد ؟
برای حلش باید بدون0 یا بصورت string فرستاد
راه دیگه ای نداره