不会起作用的代码块。 fopen函数和%d

时间:2015-06-09 17:24:09

标签: c

我是 尝试使用' j + 1'打开多个文件柜台和'%d' 但是没有工作。 这是一段代码。

#include <stdio.h>  
#include <alloc.h>

FILE *string;
int j=0;

int main(void)
{   
    for (j=0;j<10;j++)
    {
        string = fopen(("C:\\playlist%d.txt",j+1),"w+t");
        fclose(string);
    }
    return 0; 
}  

3 个答案:

答案 0 :(得分:2)

您需要使用数组来使用sprintf创建文件名,并在调用fopen时使用该数组。

int main(void)
{   
   char filename[100]; // Make the array large enough
   for (j=0;j<10;j++)
   {
      sprintf(filename,"C:\\playlist%d.txt",j+1);
      string = fopen(filename,"w+t");
      fclose(string);
   }
   return 0; 
}  

答案 1 :(得分:1)

编辑此问题最初包含 C ++ 标记。

FILE* string;
...
string = fopen(("C:\\playlist%d.txt",j+1),"w+t");

似乎你想构建一个嵌入了整数值的文件名字符串。

(顺便说一下:选择“string”作为FILE*变量的名称不是很有帮助,我建议使用更有意义的东西......)

由于此问题标有[c++],您可能希望使用方便的字符串类及其重载运算符和 std::to_string() 辅助函数进行转换一个整数到std::string,例如

std::string fileName = "C:\\playlist";
fileName += std::to_string(j+1);
filename += ".txt";

FILE* file = fopen(filename.c_str(), /* other params */);

PS 除了C FILE*之外,在C ++中还有可用于文件管理的特定文件流类,如std::fstream和相关的

答案 2 :(得分:1)

编辑:这个问题最初是用C ++标记的

由于此标记为C ++,您可以使用std::stringstd::fstream

执行此操作
int main()
{
    std::string filename = "C:\\playlist";
    std::fstream file;
    for (int i = 0; i < 10; i++)
    {
        file.open(filename + to_string(i) + ".txt");
        // do stuff
        file.close();
    }
    cin.get();
    return 0;
}