Для этой программы я должен либо написать свое имя на терминал, либо в выходной файл, указанный пользователем (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;
}
Мой код работает, когда я хочу, чтобы написать свое имя на терминал, но он не работает, когда я хочу, чтобы написать мое имя файла задается пользователем. Код компилируется и запускается, но файл просто не существует.
Файл в командной строке может и не существовать. Я должен создать файл в программе?
Я понимаю, что я делал неправильно. Спасибо всем!
Вы установили, что 'argv [1]' содержит имя файла, которое вы пытаетесь открыть для доступа к записи, (b) убедитесь, что 'файл' не является NULL, прежде чем пытаться записать на него, и (c) при условии, что оба этих параметра будут включены в текущий рабочий каталог *, где ваша программа выполняет установленный файл, который вы пытались создать? Прямо сейчас (а) и (б) кажутся потенциальными кандидатами, последний является ярким примером нарушения [Шестой заповеди Спенсера] (http://www.seebs.net/c/10com.html) – WhozCraig
С переформатированным кодом, он появляется 'fprintf (файл,« name »);' находится только в случае 'argc <2' – chux
В дополнение к предыдущему комментарию, я думаю, вы также забыли сделать fclose (файл) после записи. –