c语言 怎么改成设置自定义文件名

Huffman编码,现在的编码节选:

/*********************************************************************************
Huffman_Compression ()

用Huffman编码压缩指定的文件,并将结果存为新的文件
********************************************************************************/
int Huffman_Compression(char * infilename, char * outfilename)
{

if ((ifile = fopen (infilename, "rb")) != NULL)
{
fseek (ifile, 0L, 2);
file_size = (unsigned long) ftell (ifile);//文件的长度

fseek (ifile, 0L, 0);
get_frequency_count ();//本函数对需要进行压缩的数据进行频率统计

build_initial_heap ();

build_code_tree ();

if (!generate_code_table ())
{
printf (" \nERROR: 已超出编码范围,无法进行压缩!\n");
return 0;
}
else
{
if ((ofile = fopen (outfilename, "wb")) != NULL)
{
fwrite (&file_size, sizeof (file_size), 1, ofile);
fwrite (code, 2, 256, ofile);
fwrite (code_length, 1, 256, ofile);

fseek (ifile, 0L, 0);
compress_image ();

fclose (ofile);
}
else
{
printf("\nERROR: 无法创建输出文件 ! %s\n", outfilename);
return 0;
}
}
fclose (ifile);
}
else
{
printf ("\nERROR: %s -- 未找到文件 !\n", infilename);
return 0;
}

return 1;
}

我现在想要的是运行以后用户再自行输入要操作的文件名,而不是在源代码中规定~~~求指导!!!
/* 主程序 */
void main()
{
int choice;

display();
printf("请输入需要执行的操作并按回车(数字序号):\n");
while(choice<1||choice>3){
scanf("%d",&choice);
switch(choice)
{
case 1:

printf("\n压缩...");
start = clock();
Huffman_Compression("2.bmp","3.hufzip");//压缩
finish = clock();
total_time = finish - start;
printf("\n耗时: %d毫秒\n", total_time);
break;

第1个回答  2014-09-20
你把main()函数代码粘出来,我不想打这么多字,我给你加上
只要定义两个字符串数组变量就可以,提示用户输入相应的文件名,然后调用时用相应的变量作为参数就可以了。追问

题目补充了部分,因为字数限制,case2没粘

追答s", file1 );
printf("input target file:" );
scanf("%s", file2 );
printf("\n压缩...");  
start = clock();  
Huffman_Compression(file1, file2);//压缩  
....
break;
case 2:
printf("input source file:" );
scanf("%s", file1 );
printf("input target file:" );
scanf("%s", file2 ); 
printf("\n解压缩...");  
start = clock();  
Huffman_Decompression(file1, file2);//解压缩  
....
break;

void main()  
{  
int choice;
char file1[128],file2[128];

display();
printf("请输入需要执行的操作并按回车(数字序号):\n");  
while(choice<1||choice>3){
scanf("%d",&choice);
switch(choice)
{  
case 1:
printf("input source file:" );
scanf("%s", file1 );
printf("input target file:" );
scanf("%s", file2 );
printf("\n压缩...");  
start = clock();  
Huffman_Compression(file1, file2);//压缩  
....
break;
case 2:
printf("input source file:" );
scanf("%s", file1 );
printf("input target file:" );
scanf("%s", file2 ); 
printf("\n解压缩...");  
start = clock();  
Huffman_Decompression(file1, file2);//解压缩  
....
break;

本回答被提问者和网友采纳
第2个回答  推荐于2016-03-11
C语言在创建文件对象是,可以同时传入文件名的。
你可以参考下代码:
FILE *fp;

if((fp = fopen(filename, "w"))==NULL)
{
printf("无法读取文件");
return;
}
// 文件已经创建了 可以往里写东西了

fclose(fp);
return 0;
第3个回答  2014-09-20
char file1[256]; char file2[256];

读取file1读取file2 scanf gets
传参数时 不写2.bmp什么的,传file1 file2