файл не найден на языке c, когда я использую метку goto для повторного запуска кода без выхода из вывода - PullRequest
0 голосов
/ 15 марта 2019

Когда я запускаю этот код, он работает отлично, но когда он снова приходит к метке и после этого не удается найти 5 файлов, я снова прихожу с метки, чем все файлы не найдены

void main()
{

    int i,a;

    char filepath[100],filename[100];

    FILE *fp;

    clrscr();

    label:

    clrscr();
    printf("Press 1:");
    scanf("%d",&a);

    if(a==1)
    {
        for(i=1;i<10;i++)
        {
            sprintf(filename,"%d",i);
            strcat(filename,".txt");

            fp=fopen(filename,"r");
            if(fp==NULL)
            {
                printf("File not found!!\n");
            }
            printf("%s\n",filename);

        }
        getch();
    }
    else
    {
        exit(0);
    }
    fclose(fp);
    goto label;
}

1 Ответ

0 голосов
/ 15 марта 2019

Я думаю, что проблема заключается в закрытии файлов. В цикле for(i=1;i<10;i++) вы открываете 9 файлов, файл 1.txt в файл 9.txt. После того как вы перебрали все файлы, вы вызываете fclose(fp); только один раз. Файл, который вы сейчас закрываете, это файл 9.txt. Остальные 8 файлов никогда не закрывались.

Измените ваш цикл на что-то вроде этого:

for(i=1;i<10;i++)
{
    sprintf(filename,"%d",i);
    strcat(filename,".txt");

    fp=fopen(filename,"r");
    if(fp==NULL)
    {
         printf("File not found!!\n");
    }
    else
    {
        printf("%s\n",filename);
        fclose(fp);
    }
}

Теперь вы открываете файл, когда он существует, вы можете использовать файл и после этого закрывать файл.

fclose(fp); прямо над вашим goto label; можно удалить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...