2015-06-23 6 views
0

мое задание - взять в файл данных все возможные буквы для каждой кубики из игры Boggle. Вот копия файла данных:Ошибка `Build Error` -1073741819 - C

D R L X E I 
    C P O H S A 
    N H N L Z R 
    W T O O T A 
    I O S S E T 
    N W E G H E 
    B O O J A B 
    U I E N E S 
    P S A F K F 
    I U N H M Qu 
    Y R D V E L 
    V E H W H R 
    I O T M U C 
    T Y E L T R 
    S T I T Y D 
    A G A E E N 

Каждый кубик имеет 6 букв, и они хранятся в связанном списке. Когда я попытался запустить следующий код, я продолжаю получать код ошибки: C:\Dev-Cpp\Makefile.win [Build Error] [Untitled1.o] Error -1073741819

Я пробовал использовать 3 разных IDE, но всегда кажется, что некоторые компилируются. Я не могу понять, где я ошибаюсь! Это еще не завершено ни какими средствами, но лучше это выяснит, прежде чем я буду углубляться и углубляться. Заранее спасибо!

код:

#include <string.h> 
#include <stdlib.h> 
#include <stdio.h> 


#define LENGTH 80 

struct boggleDataNode{ 
     char data[3]; 
     struct boggleDataNode *nextData; 
}*head; 

struct boggleDieSideNode{ 
     char dieSideData[3]; 
     struct boggleDieSideNode *nextSide; 
}*head1; 

void readData(struct boggleDataNode temp); 

int main(){ 
    int counter = 0; 
    struct boggleDataNode *head; 
    struct boggleDieSideNode *head1; 
    struct boggleDataNode *temp; 
    *head = NULL; 
    *head1 = NULL; 
    *temp = *head; 
    readData(*temp); 


    system("pause"); 
    return 0; 
} 
void readData(struct boggleDataNode temp){ 
    //initializing variables including 
    //opening the input file 
    FILE *input = fopen("BoggleData.txt","r"); 
    int name =0; 
    int id=0; 
    char data[96] ={}; 

    //error checking that the file opened 
    if (input == NULL){ 
     fprintf(stderr, "Can't open input file!\n"); 
     exit(1); 
    } 
    while(fscanf(input, "%s", &data) != EOF) 
      printf("%s", data); 

} 
+2

@BLUEPIXY: Это звучит как ошибка времени выполнения, а не ошибка сборки. Не то чтобы вы ошибаетесь ... –

+1

'* head = NULL;': * (NULL) = NULL. и введите неправильное совпадение. – BLUEPIXY

+1

@BLUEPIXY: * Now * you're talkin ' –

ответ

2

В коде, измените

struct boggleDataNode{ 
     char data[3]; 
     struct boggleDataNode *nextData; 
}*head; 

в

struct boggleDataNode{ 
     char data[3]; 
     struct boggleDataNode *nextData; 
}; 

, как это кажется вам не нужен глобальный указатель для этой структуры в любом случае , Согласно вашему использованию, это будет shadowed местными head.

То же самое касается head1.

Далее вы назначаете NULL самому указателю, а не его переменной указывает на. (FWIW, NULL сам по себе указатель, недействительный один).

Изменить

*head = NULL; 

в

head = NULL; 
+0

Ah! Спасибо за ответ! Я попробовал оба из них и теперь получаю 'Ошибка 255', которая, похоже, связана с« makefile »? – bravesaint

+1

@bravesaint да, может быть. Что такое ошибка? –

+0

, похоже, ушел после того, как я скопировал + вставить в новый файл, но теперь я получаю сообщение о том, что «Исходный файл не скомпилирован» при попытке скомпилировать и запустить в DevC++ – bravesaint

1

Что бы в вашей логике программы не так, есть также ошибка синтаксиса в

char data[96] ={}; 

поскольку ISO C запрещает пустые инициализаторы массива. Если из-за этого выйдете из строя, это может объяснить «Ошибка сборки». Если вы хотите, чтобы данные были инициализированы нулем, будет выполнен номер = { 0 }.

Также неплохо проверить уровень предупреждения вашего компилятора, добавив соответствующие параметры. Какая система (ОС)? Какой компилятор?

+0

Я использую DevC++ в Windows 8. Просто сделал это изменение, похоже, не исправил многое. – bravesaint

1

попробуйте удалить амперсанд из «& данных», потому что я считаю, что вы пытаетесь прочитать строку, поэтому передайте строку, а не дирекцию.

while(fscanf(input, "%s", &data) != EOF) 
     printf("%s", data); 

, так что вы должны были бы это:

while(fscanf(input, "%s", data) != EOF) 
     printf("%s", data); 
+0

Спасибо за ваш ответ! – bravesaint

0

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

Следующий код

1) компилируется,

2) имеет ненужные элементы либо закомментировать или #if 0 ... # ENDIF из

3) проверяет наличие ошибок ввода

4) использует «perror()» для правильной выдачи информации об ошибках функции системы , включая сообщение, относящееся к текущему значению «errno»

5) закрывает входной файл после завершения чтения

6) fscanf() остановится после прочтения одного числового символа из входного файла , потому что% s остановится, когда встретится какое-либо «пустое пространство».

#include <string.h> 
#include <stdlib.h> 
#include <stdio.h> 


//#define LENGTH 80 
// Note: surround numeriC#defines with parens to avoid text substituion errors 
#define MAX_DATA_LEN (96) 

#if 0 
struct boggleDataNode 
{ 
     char data[3]; 
     struct boggleDataNode *nextData; 
}; 
#endif 

#if 0 
struct boggleDieSideNode 
{ 
     char dieSideData[3]; 
     struct boggleDieSideNode *nextSide; 
}; 
#endif 


void readData(void); 

int main(void) 
{ 
    //int counter = 0; 
    //struct boggleDataNode *head = NULL; 
    //struct boggleDieSideNode *head1 = NULL; 
    //struct boggleDataNode *temp = NULL; 

    readData(); 


    system("pause"); 
    return 0; 
} // end function: main 


void readData() 
{ 
    //initializing variables including 
    //opening the input file 
    //int name =0; 
    //int id=0; 
    char data[ MAX_DATA_LEN ]; 

    FILE *input = fopen("BoggleData.txt","r"); 
    //error checking that the file opened 
    if (input == NULL) 
    { 
     perror("Can't open input file!\n"); 
     exit(1); 
    } 

    // implied else, fopen successful 

    while(1 == fscanf(input, " %s", data)) // note: format string leading space to skip 'white space' 
      printf("%s", data); 

    fclose(input); 
} // end function: readData