需要获取用户输入的字符串并使用用户字符串创建多个文件作为其中的一部分

时间:2017-10-16 15:19:02

标签: c file

我正在尝试创建一些文件,我在其中定义文件名的第一部分,然后使用用户输入的字符串作为第二部分。 所以如果用户输入“filename”,我想创建1TEMPfilename,1FLUXfilename,1PRESSUREfilename

到目前为止:

main ()
{

  char filename[64];

  printf("Enter the Runfile ID (e.g. jul0476.a\n");

  fgets(filename,50,stdin);

  //create new files

  FILE *fp;

  fp = fopen('1FINALTEMP'filename,"w");

}

这会产生错误,有关如何执行此操作的任何想法吗?

2 个答案:

答案 0 :(得分:0)

不要忘记fgets()也会在尾随换行符(\n)中读取。您可能想删除它。

fgets(filename,50,stdin);
filename[strlen(filename)-1]='\0';

之后创建新文件名。

char names[3][60];
sprintf(names[0], "1TEMP%s", filename);
sprintf(names[1], "1FLUX%s", filename);
sprintf(names[2], "1PRESSURE%s", filename);

然后使用这些字符串作为fopen()的参数,如

fopen(names[0], "w");

通过查看其返回值来检查fopen()是否成功。如果是NULL,则会发生一些错误。

至于fp = fopen('1FINALTEMP'filename,"w");给出错误,'1FINALTEMP'是一个字符串而不是字符文字。单引号用于字符文字。请参阅here

只有相邻的字符串文字连接起来here

  

连接相邻的字符串文字标记。

即,在printf("%s", "hello " "world");中,"hello " "world"将成为"hello world"

但这只适用于字符串文字。

编辑:snprintf()优先于sprintf(),因为如果要写入的字符串太大而无法存储在发生写入的字符串中,后者可能会写出越界。使用snprintf(),您可以指定要写入的字节数。

char name[60];
snprintf(names, 60, "1TEMP%s", filename);

答案 1 :(得分:-1)

尝试从fgets中获取存储文件名的字符串变量,然后使用' +'并连接你提供的内容(1Finaltemp)然后将其传递给文件指针,如fp = fopen(myNewFile,w)