【发布时间】:2017-02-19 07:45:30
【问题描述】:
对于这个程序,我应该将我的名字写入终端或用户提供的输出文件(case 'f')。
#include <stdio.h>
int main(int argc, char **argv)
{
// no output file print to screen, print name to terminal
if (argc < 2)
{
fprintf(stdout, "name\n");
}
//print name to output file given by user
else
{
int option;
int fFlag = 0;
while ((option = getopt(argc, argv, "f:")) != -1)
{
//if case 'f' print to output file
switch (option)
{
case 'f':
fFlag = 1; // flag indicates writing name to file
break;
//case f or error
case '?':
printf("error");
break;
}
}
//write to name to output file
if (fFlag)
{
FILE *file = fopen(argv[1], "w");
fprintf(file, "name");
}
}
return 0;
}
当我想将我的名字写入终端时,我的代码有效,但当我想将我的名字写入用户提供的文件时,它不起作用。代码编译并运行,但文件不存在。
命令行中的文件可能不存在。我应该在程序中创建文件吗?
我明白我做错了什么。谢谢大家!
【问题讨论】:
-
您是否 (a) 检查
argv[1]是否包含您尝试打开以进行写访问的文件名,(b) 在尝试写入之前检查file是否为非 NULL它,并且 (c) 假设这两个都成功了,请确保您的程序正在执行的 当前工作目录 建立了您尝试创建的文件?现在,(a)和(b)似乎是潜在的候选人,后者是违反Spencer's Sixth Commandment的典型例子 -
使用重新格式化的代码,
fprintf(file, "name");似乎只在argc < 2的情况下 -
除了之前的评论,我想你写完后也忘记做fclose(file)了。
-
顺便说一句,
getoptrequires<unistd.h>,您似乎也省略了。这很重要。
标签: c command-line-arguments fopen getopt