2015-01-05 3 views
-1

Я продолжаю получать эту ошибку, когда пытаюсь запустить кусок кода, скажу, что переменная используется, которая не инициализирована, несмотря на то, что я ее объявил.Переменная не инициализируется

{ 
    FILE *fptr; 
    int length; 
    int number_search; 

    struct student 
    { 
     char surname[15]; 
     char initials[6]; 
     char title[4]; 
     int student_number; 
     char module_name[25]; 
     char module_code[7]; 
     int assesment_mark; 
     int exam_mark; 
     int tuition_fee; 
    }; 

struct student record_student; 
struct student *student_ptr; 
student_ptr=&record_student; 
length=sizeof(struct student); 

printf("2 has been called\n"); 
printf("Enter module code: \n"); 
scanf("%s", module_code); 
clear_buffer(module_code); 
printf("%s\n",module_code); /*Test the string entered is 6 charaters, AB1234 format*/ 

    if (! modcheck(module_code)) /*Change this fucntion to a differnt one to check correct format*/ 
{ 
    printf("Invalid input\n"); 
    } 
    else  
    { 
     printf("input ok\n"); 
     printf("Enter Student Number: \n"); 
     scanf("%d",number_search); 
    } 

это говорит о том, что int number_searchisn't being initialized несмотря на его в коде выше.

ответ

2

Изменение:

scanf("%d",number_search); 

в

scanf("%d", &number_search); 
      //^See here the address operator 
1

Действительно, number_search не инициализирован.

И ваш звонок scanf(3) неверен. Он должен быть

scanf("%d", &number_search); 

и даже с этой коррекции, number_search еще неинициализированным: scanf может потерпеть неудачу (например, если ваш пользователь hello или Ctrl D на Linux), и вы должны проверить результат scanf (число успешно считанных элементов), по крайней мере:

if (scanf("%d", &number_search) != 1) { 
    perror("number_search input failure"); exit(EXIT_FAILURE); 
} 

Я считаю, что вы должны всегда явно инициализировать локальные переменные (если инициализация происходит, чтобы стать бесполезными, компилятор будет оптимизировать его), например

int number_search = 0; 

PS. Вы должны скомпилировать все предупреждения и информацию об отладке, например. gcc -Wall -Wextra -g; как только вы уверены, что не имеете ошибок, добавьте -O2, чтобы получить оптимизацию.

0
printf("Enter module code: \n"); 
scanf("%s", module_code); 

Это должно быть

printf("Enter module code: \n"); 
scanf("%s", student_ptr->module_code); 

и

scanf("%d", &number_search); 

Сканирования по адресу переменных, которая определяется &number_search

Смежные вопросы