Я пытаюсь написать программу, которая будет выполнять линейное линейное затухание, линейное затухание или линейное перекрестное затухание, как указано пользователем, в файлах .au'` ,APPCRASH Внутренний оператор switch - C
Я сделал заявление switch
на основании ввода пользователем int
, который будет направлен в один из трех случаев, в зависимости от значения ввода.
В каждом из этих случаев я предлагаю пользователю полный путь к файлу, который он/она хочет использовать для затухания, а затем открыть файл для записи затухания.
Однако, похоже, что после открытия файла моя программа выйдет из строя. Я уверен, что правильно использую switch
, и я обязательно закрою каждый файл в конце, поэтому я не уверен, почему программа продолжает сбой.
int main()
{
FILE *f1, *f2, *fout;
int r1, choice;
float dr;
char yn = 'y', path1[100], path2[100];
while(yn == 'y' || yn == 'Y')
{
printf("Fade Out(1) Fade In(2) Cross-fade(3): ");
scanf("%i", &choice);
printf("Specify duration of fade (in seconds): ");
scanf("%d", &dr);
switch(choice)
{
case(1):
printf("Please specify full path of file you want to fade out\n");
scanf("%s", path1);
f1 = fopen(path1, "r");
if(f1 == NULL)
{
printf("Incorrect file path specifiation. Program terminating...\n");
break;
}
fout = fopen("out.au", "w");
//r1 = read_header(f1, NULL, fout, choice, dr);
printf("We've gotten this far!\n");
break;
case(2):
printf("Please specify full path of file you want to fade in\n");
scanf("%s", path1);
f1 = fopen(path1, "r");
if(f1 == NULL)
{
printf("Incorrect file path specifiation. Program terminating...\n");
break;
}
fout = fopen("out.au", "w");
//r1 = read_header(f1, NULL, fout, choice, dr);
break;
case(3):
printf("Specify first file used to cross-fade\n");
scanf("%s", path1);
printf("Specify second file used in cross-fade\n");
scanf("%s", path2);
f1 = fopen(path1, "r");
f2 = fopen(path2, "r");
if((f1 == NULL || f2 == NULL))
{
if(f1 == NULL)
printf("Incorrect file path specification for first file. Program terminating...\n");
else
printf("Incorrect file path specification for second file. Program terminating...\n");
break;
}
fout = fopen("out.au", "w");
//r1 = read_header(f1, f2, fout, choice, dr);
break;
default:
printf("Not a valid option.\n");
break;
}
fclose(f1);
if(f2 != NULL)
fclose(f2);
fclose(fout);
fflush(stdin);
printf("Again (y/n)? ");
scanf("%c", &yn);
}
return 0;
}
Другой недостаток: вы закрываете 'fout', возможно, вы его не открыли. Вы на Linux? Я мог бы рассказать вам, как узнать причину сбоя с помощью 'gdb'. –
Нет, я использую Windows с MinGW. – Delfino