1

FileName000.extension FileName001.extension などの形式のファイルでいっぱいのフォルダーがあります。それらをすべて開いて、C++ で何かをする必要があります。私が試したのはこれです:

for(int i=0; i<number_of_files; i++){
        char filename[64];
if(i<10){
        sprintf(filename, "/Path/To/File/FileName00%i.extension", i);
}
    if(i<100){
        sprintf(filename, "/Path/To/File/FileName0%i.extension", i);
}
else{
        sprintf(filename, "/Path/To/File/FileName%i.extension", i);
}
        ifstream infile ( filename );

//DO STUFF TO FILES HERE INSIDE THE FOR LOOP
}

これは、何らかの理由で ifs のために機能していないようです。それが機能するだけで、それが文字か文字列かは問題ではありません。Xcode を IDE として使用していますが、プログラムは Windows でも動作する必要があります。

4

2 に答える 2

2

を使用sprintf(... "...%03d...", ...)して、一貫した 3 桁の番号を取得できます。

于 2013-07-05T14:16:57.063 に答える
2

適切なリファレンスを読むと、選択部分がまったく必要ないことがわかります。

snprintf(filename, sizeof(filename), "/Path/To/File/FileName%03d.extension", i);

3形式コードのはsnprintf、フィールド幅として 3 文字を使用する0ように指示し、先頭は 99 未満の値に先行ゼロを使用するように指示します。


ifステートメントに関する問題については、次のものがありませんelse

if (i < 10) { ... }
else if (i < 100) { ... }
else { ... }

C++ ソリューションが必要な場合は、次を使用できますstd::ostringstream

std::ostringstream os;
os << "/Path/To/File/FileName" << std::setfill('0') << std::setw(3) << i << ".extension";

ifstream file(os.str());
于 2013-07-05T14:17:18.880 に答える