2015-09-11 3 views
-3

Я получаю сообщение об ошибке Аномальное завершение программы при выполнении этого кода.Аномальное завершение программы в turbo c 3.0 Окно DOS

Целью программы является считывание массива чисел из файла list.txt и выполнение рекурсивного двоичного и рекурсивного линейного поиска на этом загруженном массиве.

Вот мой код:

#include <stdio.h> 
#include <conio.h> 

void menu(); 

int a[30000],n; 

void main() 
{ 
    FILE *fp; 
    int i, ch; 

    fp = fopen("list.txt", "r"); 
    if(fp == NULL) 
    { 
     printf("\nCant read\n"); 
     exit(0); 
    } 

    for(i = 0; i < n; i++) 
     fscanf(fp, "%d", &a[i]); 

    fclose(fp); 

    for(i = 0; i < n; i++) 
     printf(" %d ", a[i]); 

    menu(); 

    scanf("%d", &ch); 
    if(ch == 1) 
    { 
     printf("ch1\n"); 
    } 
    else if(ch == 2) 
    { 
     printf("ch2\n"); 
    } 
    else 
    { 
     exit(1); 
    } 
}//end main 



void menu() 
{ 
    printf("\nEnter the number of elements in array\n"); 
    scanf("%d", &n); 
    printf("\n1.Linear Search\n2.Binary Search\n3.Exit\nEnter your choice\n"); 
} 

У меня есть логика моего выбора 1 и 2. Мне нужно знать, что случилось с моим выше кодом. Пожалуйста, помогите мне в этом

+2

Вопросы, требующие помощи по отладке («почему этот код не работает?») Должны включать в себя желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для воспроизведения в самом вопросе. Вопросы без четкого описания проблемы не полезны другим читателям. См.: Как создать [mcve]. – Olaf

+0

И форматируйте/отформатируйте свой код правильно. Это беспорядок. – Olaf

+2

Вы не устанавливаете 'n', пока не назовете' menu', поэтому перед этим вызовом 'n' будет ноль, и в массив ничего не будет прочитано. –

ответ

1

Turbo C! Это возвращает некоторые воспоминания, но у меня больше нет моей копии. В любом случае, вы используете n, прежде чем инициализировать его в menu(). (Как отмечали комментаторы.) Вы можете также рассмотреть возможность выделения массива с malloc() вместо фиксированного размера.

Borland Turbo C поставляется с Turbo Debugger, и на самом деле я думаю, что Borland предоставил его бесплатно на некоторое время, поэтому работа над ним может дать вам представление о том, где произошло ненормальное завершение, и трассировку стека, которую вы можете использовать для проверки переменные, которые его вызвали. Другая хорошая практика заключается в том, чтобы ввести assert() звонки, чтобы убедиться, что ваши предположения о том, что у вас в переменных, верны.

+1

Дети и их причудливые инструменты в эти дни. Это должно было быть написано на Паскале, как и все хорошие программы Turbo! :) –

+0

@lorehead tnx для ответа Я попробую и вернусь к вам –

+0

Дорогой Эдвард Я полагаю, что я должен закончить про в c только с момента его предписания в университете –