scanf, printf

書式付出力(printf 系)

変換文字列の書式は以下の形式である.

printf


% [フラグ][フィールド幅].[精度][h/l/L修飾][変換文字]
scanfではこうなる。

% [代入抑止][フィールド幅][h/l/L修飾][変換文字]

例
sprintf(fl, %06f, (double)a); //1.2345   12.345   0034.6
sprintf(fl, %*s, a, b); //a=5 b=' '   fl='     '; (five brankspace)
sprintf(fl, %.0f, a); //a=56.4878  fl=56;

sscanf(text, %*3c%4f, &floatNum);  //text="ABb5.85"  floatNum = 5.85; //%1.2fと指定していないのに注意
sscanf(text, %6lf, &doubleNum);  //scanf系はdoubleのときfでなく、lfを使う。
//%06lfとしても、0に何の意味もない。

C++では、こういうのもあり。

#include  //<--忘れずに。
string items[i]="178.45 876";
double a;
int b;

ostringstream ss;  //ss(str)とかしなくてよい.
ss << anslen << " ";
res = ss.str();
ちなみに、
string str ( ) const; //で、戻り値はconst型でないので、注意.
string a, b; istringstream iss(attendees[i]); iss >> a >> b;
string s = "TU @ 77"みたいな形式のとき、数字の扱いはどうなるかを試してみる.
    vector C(sz, 0);
    vector E(sz, "");
    for(int i = 0; i < sz; i++) {
      stringstream iss(inequalities[i]);
      string var;
      iss >> E[i] >> var >> C[i];  //OK
//C[i]の部分はしっかりとint型に直してくれている.
//不定の個数の英語の文章をword毎に区切って読み取りたい
//http://www.cplusplus.com/reference/iostream/istringstream/参照
string a = "aaa bbb ccc ddd eee fff gggg";
istringstream iss;
iss.str(a);
//istringstream iss(a); でももちろんOK
while(1) {
	string s;
	iss >> s;
	if(s != "") {
		cout << s << endl;
	} else {
		break;
	}
}
//もしくは、
int main() {
	string a = "aaa bbb ccc ddd eee fff gggg";
	istringstream iss(a);
	string s;
	while(iss >> s) {
			cout << s << endl;
	}
} //こっちのほうがスマートなので、こっち使おう。
//カンマ区切りのときは置き換えをしてから読み取る。
for(int i = 0; i < sz; i++) {
		if(item[i] == ',') {
			item[i] = ' ';
		}
}
//もしくは replace をつかう。
replace(str.begin(), str.end(), ',', ' ');

//[,]-->[ ]とすることができない時は、getlineを使うとよさげ
while( getline(iss, str, ',') ) {
  istringstream issline(str);
  string tmp;
  while(issline >> tmp ) {
    ...
  }
}


//区切りが一つとか二つとか大したことない時はsubstrを使うのが簡単。
for(int i = 0; i < sz; i++) {
  int pos = placeboard[i].find('-');
  string name = placeboard[i].substr(0, pos);
  string position = placeboard[i].substr(pos+1);
}
//オブジェクト指向ライクな書き方なら、
s.str("");  //は望ましくない。
もうひとつオブジェクトを作った方がよい。
istringstream issa(a);
...
istringstream issb(b);
...