最終的な完全なプログラムは以下のリンクの下にあります。私に答えるすべての人に感謝します。 http://pastebin.com/1Qrs11JEリンクされたリスト新しいノードの追加問題
質問:
私はC言語でのリンクリストで迷惑な問題を持っている
は、プログラムを完了しました。私は明日提出する必要がある宿題があります。私は昨日からこの問題を解決しようとしていましたが、できませんでした。私は問題がリンクされたリストに新しいノードを追加していると思うが、リンクされたリストのレコードを見ようとするとエラーが出る。私は意味の結果に直面しており、プログラムはエラーで終了します。
以下のリンクで、よりわかりやすいコードをご覧いただけます。 リンク:ここhttp://pastebin.com/Ugtue6JT
が私のコードです:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <malloc.h>
// structure definition
struct node {
char name[50];
int age;
int student_no;
char nationality[50];
struct node *next;
};
typedef struct node *NODE_T;
// function declarations
void enter_new_data();
void remove_existing_data();
void display_all_data();
void show_options();
NODE_T getnode();
void freenode(NODE_T p);
void free_buffer();
void continue_f(char message[100]);
// global variables
char ch;
// create linked-list's main holder variable
NODE_T students,conductor;
int main(){
// allocate memory for the node link-list holder
students = NULL;
//students->next = 0; // initialize next to 0 for first node of linked-list
// show the options that user has
show_options();
return 1;
}
// this function will list options that user can apply
void show_options(){
system("cls"); // clear screen
int opt,opt_bool=0;
printf("%s\n\n%s\n%s\n%s\n%s\n\n","The Options You Have","1. Add New Student's Record","2. Delete An Existing Student's Record","3. Display The List Of Students","4. Exit");
while(opt_bool != 1){
printf("Operation: ");
scanf("%d",&opt);
if(opt == 1 || opt == 2 || opt == 3 || opt == 4){
opt_bool = 1;
}
}
// check the operation and go to the operation
if(opt == 1){ // adding record
enter_new_data();
} else if(opt == 2){ // removing record
} else if(opt == 3){ // displaying records
display_all_data();
} else if(opt == 4){ // exit the program
exit(0);
}
}
// enter new student data into linked-list
void enter_new_data(){
system("cls"); // clear screen
// get a new node
NODE_T p = getnode();
printf("You are entering a new student's record\n");
// take student's name
printf("Student's Name: ");
scanf("%s",p->name);
free_buffer();
// take student's age
printf("Student's Age: ");
scanf("%d",&p->age);
free_buffer();
// take student's number
printf("Student's Number: ");
scanf("%d",&p->student_no);
free_buffer();
// take student's nationality
printf("Student's Nationality: ");
scanf("%s",p->nationality);
free_buffer();
// set p->next next value of last node of linked-list, which is equal to 0
p->next = 0;
printf("%s, %d, %d, %s",p->name,p->age,p->student_no,p->nationality);
// if there is no any node yet, add node p as first node
if(students == NULL) {
students = p;
} else {
conductor = students; // assign linked-list to the conductor to traverse
// reach the last node
while (conductor->next != 0)
{
conductor = conductor->next;
}
conductor->next = p; // append the node p to the linked list
}
freenode(p); // set free node p
continue_f("Adding new record is done."); // ask press any key to continue
show_options(); // show options
}
// to display all data of linked list
void display_all_data(){
system("cls"); // clear screen
printf("The Student Records\n\n");
printf("%s%7s%18s%15s","STUDENT'S NAME","AGE","STUDENT NUMBER","NATIONALITY"); // captions
freenode(conductor);
conductor = getnode();
conductor = students; // assign linked-list to the conductor to traverse
if (conductor != NULL) { /* Makes sure there is a place to start */
// traverse untill last node
while (conductor->next != 0)
{
printf("\n%s%7d%18d%15s",conductor->name,conductor->age,conductor->student_no,conductor->nationality); // record
conductor = conductor->next;
}
} else {
printf("\n\n There is not any record yet.");
}
continue_f("Listing records is done."); // ask press any key to continue
show_options(); // show options
}
// create new node
NODE_T getnode(void){
NODE_T p;
p = (struct node *) malloc(sizeof(struct node));
return p;
}
// set free a node
void freenode(NODE_T p){
free(p);
}
// clear the buffer if there are any extra data in it
void free_buffer(){
while (getchar() != '\n') { }
}
void continue_f(char message[100]){
printf("\n\n%s\nPress any key to continue...",message);
getch(); // wait for pushing any key from user
}
http:// stackoverflow。com/help/mcve – melpomene
「」と「」は標準ヘッダーではありません。 –
melpomene
@melpomene: '[mcve]'タグを使用してください:) –