trying to print the linkedlist for 2+ objects it prints infinite time
Code:
#include<stdio.h>
#include<stdlib.h>
#include<String.h>
#include<ctype.h>
/*car struct */
typedef struct car {
unsigned int plate_number;
unsigned int vin_number;
char *Manufacturer_Name;
char *model;
char *colour;
unsigned int year_Manufactured;
unsigned int realseYear;
unsigned int payment;
unsigned int value;
unsigned int engine_power;
struct car *next;
} car;
car *cars;
/*function to scan and check the int input */
int CheckIntinput(unsigned int *a)
{
char temp[20];
int i;
int flag = 1;
while (1) {
scanf("%s", temp);
for (i = 0; i < strlen(temp); i++) {
if (!isdigit(temp)) {
flag = 0;
printf
("You did not enter a number , Please enter an argument's number\n");
break;
}
}
if (flag) {
break;
}
flag = 1;
}
*a = strtoul(temp, NULL, 10);
return 1;
}
/*function to check if the information of the car are correct */
void checkifcarnputiscorrect(unsigned int *plate_number,
unsigned int *vin_number,
unsigned int *year_Manufactured,
unsigned int *realseYear, unsigned int *payment,
unsigned int *value, unsigned int *engine_power)
{
int flag = 1;
while (1) {
printf("enter plate number :");
CheckIntinput(plate_number);
if (*plate_number > 9999999 || *plate_number < 1000000) {
printf("plate number should be 7 digits try again \n");
flag = 0;
}
/*
if(!checkifcaralreadyinlist(*plate_number))
{
printf("the car is already in the list \n");
flag=0;
} */
if (flag) {
break;
}
flag = 1;
}
while (1) {
printf("enter vin number :");
CheckIntinput(vin_number);
if (*vin_number > 99999 || *vin_number < 10000) {
printf("vin_number should be 5 digits try again\n");
flag = 0;
}
if (flag) {
break;
}
flag = 1;
}
while (1) {
printf("enter year manfucatured :");
CheckIntinput(year_Manufactured);
if (*year_Manufactured > 9999 || *year_Manufactured < 1000) {
printf("yeaer_manfucatured should be 4 digits try again\n");
flag = 0;
}
if (flag) {
break;
}
flag = 1;
}
while (1) {
printf("enter realese year :");
CheckIntinput(realseYear);
if (*realseYear > 9999 || *realseYear < 1000) {
printf("realse year should be 4 digits try again \n");
flag = 0;
}
if (flag) {
break;
}
flag = 1;
}
while (1) {
printf("enter payment :");
CheckIntinput(payment);
if (*payment > 9999999 || *payment < 0) {
printf("payment should be between 0-9999999 digits\n");
flag = 0;
}
if (flag) {
break;
}
flag = 1;
}
while (1) {
printf("enter value :");
CheckIntinput(value);
if (*value > 9999999 || *value < 0) {
printf("value should be between 0-9999999 digits\n");
flag = 0;
}
if (flag) {
break;
}
flag = 1;
}
while (1) {
printf("enter engine_power :");
CheckIntinput(engine_power);
if (*engine_power > 9999 || *engine_power < 1000) {
printf("engine power be 4 digits\n");
flag = 0;
}
if (flag) {
break;
}
flag = 1;
}
}
/*function to scan and check if the input is only chars */
void Checkstringifonlychars(char *str)
{
int i;
int flag = 1;
while (1) {
scanf("%s", str);
for (i = 0; i < strlen(str); i++) {
if (!isalpha(str)) {
flag = 0;
printf("wrong input try input only chars.");
break;
}
}
if (flag) {
break;
}
flag = 1;
}
}
int CheckLonginput(unsigned long *a)
{
char temp[20];
int i;
int flag = 1;
while (1) {
scanf("%s", temp);
for (i = 0; i < strlen(temp); i++) {
if (!isdigit(temp)) {
flag = 0;
printf
("You did not enter a number , Please enter an argument's number\n");
break;
}
}
if (flag) {
break;
}
flag = 1;
}
*a = strtoul(temp, NULL, 10);
return 1;
}
/*creating empty car list */
int createCarList()
{
cars = (car *) malloc(sizeof(car));
if (!cars) {
return 0;
}
cars->next = NULL;
return 1;
}
int addNewCar()
{
unsigned int plate_number, vin_number, realseYear, year_Manufactured, payment,
value, engine_power;
char *Manufacturer_Name, *model, *colour, c;
car *temp = NULL;
car *p = NULL;
temp = NULL;
temp = (car *) malloc(sizeof(car));
while (1) {
checkifcarnputiscorrect(&plate_number, &vin_number, &year_Manufactured,
&realseYear, &payment, &value, &engine_power);
Manufacturer_Name = (char *) malloc(10 * sizeof(char));
printf("enter Manufacturer Name:");
Checkstringifonlychars(Manufacturer_Name);
model = (char *) malloc(10 * sizeof(char));
printf("enter model:");
Checkstringifonlychars(Model);
colour = (char *) malloc(5 * sizeof(char));
printf("enter colour of the car:");
Checkstringifonlychars(colour);
temp->plate_number = plate_number;
temp->vin_number = vin_number;
temp->Manufacturer_Name = Manufacturer_Name;
temp->model = model;
temp->colour = colour temp->year_Manufactured = year_Manufactured;
temp->realseYear = realseYear;
temp->payment = payment;
temp->value = value;
temp->engine_power = engine_power;
temp->next = NULL;
if (cars == NULL) {
cars = temp;
} else {
p = cars;
while (p->next != NULL) {
p = p->next;
}
p->next = temp;
}
printf("\n done adding? if yes press y ");
scanf(" %c", &c);
if (c == 'y') {
break;
}
}
if (cars == NULL) {
return 0;
}
return 1;
}
void printAllCars(void)
{
car *tmp = cars;
if (!cars) {
printf("No Cars in list to Shown\n");
return;
}
printf("\nCar List :\n\n");
printf
("LicenseNum | chassisNum | makerName | modelName | color | productionYear | onRoadYear | price | paidMoney | engine");
printf
("\n----------------------------------------------------------------------------------------------------------------------\n");
while (tmp != NULL) {
printf("%-11u ", tmp->plate_number);
printf("%-13u ", tmp->vin_number);
printf("%-11s ", tmp->Manufacturer_Name);
printf("%-11s ", tmp->model);
printf("%-7s ", tmp->colour);
printf("%-16u ", tmp->year_Manufactured);
printf("%-11u ", tmp->realseYear);
printf("%-9u ", tmp->value);
printf("%-14u ", tmp->payment);
printf("%u\n", tmp->engine_power);
tmp = tmp->next;
}
printf("\n");
}
int main()
{
createCarList();
addNewCar();
printAllCars();
return 0;
}