我是C
编程的初学者,我正在做一个图书馆管理系统。详细是图书馆将有只有100本书的容量,我想,如果用户输入的数量大于容量的程序重新要求用户输入给定的限制,但当我运行程序,我没有得到预期的输出,我有点周英语,所以请原谅我有问题的任何错误。
问题发生在switch case
、case 1.
中的if condition block
中
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct book
{
char name[50];
char Authorname[20];
int Quantity;
} bk;
static int bookno = 1;
void incrementBN()
{
bookno++;
}
void decrementBN()
{
bookno--;
}
int main()
{
int capacity = 100;
bk book[capacity];
int TotalQuantity = 0;
int option;
// system("cls");
puts("Welcome to Library Managemt");
puts("---------------------------");
puts("1. Add Books.");
puts("2. View Books.");
puts("3. Remove Books.");
puts("4. Issue Books.");
puts("5. View Issue Books.");
puts("6. Return Books.");
puts("---------------------------");
printf("Enter your option : ");
scanf("%d", &option);
getchar();
switch (option)
{
case 1:
if (TotalQuantity < capacity)
{
char *YN = (char *)malloc(1 * sizeof(char));
*YN = 'y';
while (*YN == 'y' || *YN == 'Y')
{
printf("Enter Details for Book No %d.\n", bookno);
printf("Enter Name of book No : ");
gets(book[bookno].name);
printf("\nName of book : %s \n", book[bookno].name);
printf("Enter Name of Author : ");
gets(book[bookno].Authorname);
printf("Name of Author : %s \n", book[bookno].Authorname);
printf("Enter Quantity of books : ");
scanf("%d", &book[bookno].Quantity);
getchar();
printf("Quantity Available : %d and totial quantiuty is %d\n", book[bookno].Quantity, (book[bookno].Quantity + TotalQuantity));
incrementBN();
// issue here the compiler is not going into this if code if user enter quatity greater than capacity
if (capacity < (book[bookno].Quantity) + TotalQuantity)
{
printf("Enter Quantity of books less than %d : ", capacity - TotalQuantity);
scanf("%d", &book[bookno].Quantity);
}
else
{
TotalQuantity += book[bookno].Quantity;
}
printf("Do you want to add new book : (Y/N) ");
scanf("%c", &(*YN));
getchar();
}
free(YN);
}
else
{
printf("You Cannot Add new Books because Space is full.\n");
}
break;
case 2:
{
int *index = (int *)calloc(1, sizeof(int));
*index += 1;
while (*index < bookno)
{
printf("\nName of book : %s \n", book[*index].name);
printf("Name of Author : %s \n", book[*index].Authorname);
printf("Quantity Available : %d \n", book[*index].Quantity);
}
}
break;
default:
printf("Please Select the Valid option\n");
break;
}
return 0;
}
我只是想练习我学到的东西,但在这里我得到了问题,但我没有得到问题,编译器正在打印用户输入的数量值,但没有执行这些值,如果块中有人能帮助我,告诉我为什么会发生这种情况?
1条答案
按热度按时间hujrc8aj1#
我尝试了你的程序,并注意到我收到的编译器警告沿着程序的行为,下面是你的程序的重构版本。
我希望那些需要重构代码的部分可以本地化到程序的一个部分,但是由于我遇到的行为,我决定包含完整的重构代码。以下是一些要点。
有了这些,下面是一个快速测试,在终端上输入几本书的信息。
此外,我在重构的代码中加入了额外的注解,试图解释和澄清这些建议的编码技术的理由。当你学习这门语言时,你会发现有很多方法可以实现你想要的功能。这只是一个建议的方法。和往常一样,搜索可用于帮助您学习语言的教程文献。