I'm a beginner, I'm trying out on a Library Management System thingy, and it comes out that error appears (Debug Assertion Failed), and the expression is (file_name != nullptr).
When I'm in the Main Menu, when I select the 1st option, this error came out and so I need help, thanks:
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
#define _CRT_SECURE_NO_WARNING
int AddNewBook(librecord);
int Exit();
struct
{
int id;
char title;
char edition;
int year;
char location;
char price;
int status;
}book;
FILE *librecord;
char book_id;
char book_title;
char book_edition;
char book_year;
char book_location;
char book_price;
char confirmation;
int no_value;
int main(void)
{
printf(" ** *** *** ********** \n");
printf(" ** **** **** ********** \n");
printf(" ** ** ** ** ** *** \n");
printf(" ** ** ** ** ** ********** \n");
printf(" ** ** ** ** ** *** \n");
printf(" ******* ** **** ** ********** \n");
printf(" ******* ** ** ** ********** \n");
printf("\n");
printf(" Welcome to Library Management System \n");
printf("\n");
printf(" MAIN MENU \n");
printf("\n");
printf(" 1. Add New Book \n");
printf(" 2. Edit Book Information \n");
printf(" 3. Delete Book \n");
printf(" 4. View Book List \n");
printf(" 5. Book Check-In \n");
printf(" 6. Book Check-Out \n");
printf(" 7. Search \n");
printf(" 8. Exit \n");
int choice;
printf("\n Please enter a number: ");
scanf_s("%d", &choice);
switch(choice)
{
case 1:
system("cls");
AddNewBook(librecord);
break;
case 8:
Exit();
default:
printf("Wrong Input !!! Please re-enter a number!!! \n");
system("pause");
system("cls");
main();
}
}
int AddNewBook(FILE *librecord)
{
librecord = fopen(librecord, "ab+");
printf("\n");
printf(" ADD NEW BOOK \n");
printf("\n");
printf(" Book ID: ");
scanf_s(" %d", &book.id);
fflush(stdin);
strcpy(book.id, book_id);
printf("\n Title: ");
scanf_s(" %s", &book.title);
fflush(stdin);
strcpy(book.title, book_title);
printf("\n Edition: ");
scanf_s(" %s", &book.edition);
fflush(stdin);
strcpy(book.edition, book_edition);
printf("\n Year of Publication: ");
scanf_s(" %d", &book.year);
fflush(stdin);
strcpy(book.year, book_year);
printf("\n Shelf Location: ");
scanf_s(" %s", &book.location);
fflush(stdin);
strcpy(book.location, book_location);
printf("\n Price(RM): ");
scanf_s(" %s", &book.price);
fflush(stdin);
strcpy(book.price, book_price);
printf("Confirm? (Y/N) \n");
scanf("%c", &confirmation);
}
int Exit()
{
exit(0);
}
Debug Assertion Failed!
Program: ...ments\Visual Studio 2015\Projects\Project9\Debug\Project9.exe File: minkernel\crts\ucrt\src\appcrt\stdio\fopen.cpp Line: 30
Expression: file_name != nullptr
For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts.
(Press Retry to debug the application)
The message tells you that you have passed a NULL filename to fopen. And indeed, librecord is an uninitialised static variable, whose value is NULL initially. (An assertion is a test for programming errors; you are not supposed to pass NULL as filename.)
Initialise librecord with a suitable file name or assign a file name during program execution before you open the file. (And after opening the file, check for success. You cannot rely on your dta base file actually being present and readable.)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With