为什么这个程序即使在我输入N后,依然询问我是否要录入书籍信息,是没有break出去吗?
#include<stdio.h>
#include<stdlib.h>
struct Book
{
char title[128];
struct Book *next;
};
void addBook(struct Book **lbr);
void getInput(struct Book *book);
void printlbr(struct Book *lbr);
void release(struct Book **lbr);
void addBook(struct Book **lbr)
{
struct Book *book,*temp;
book = (struct Book *)malloc(sizeof(struct Book));
if(book == NULL)
{
printf("内存分配失败\n");
exit(1);
}
getInput(book);
if(*lbr != NULL)
{
temp = *lbr;
*lbr = book;
book = temp;
}
else
{
*lbr = book;
book->next = NULL;
}
}
void getInput(struct Book *book)
{
printf("请输入书名:");
scanf("%s",book->title);
}
void printlbr(struct Book *lbr)
{
struct Book *book;
int count = 1;
book = lbr;
while(book != NULL)
{
printf("Book%d",count);
printf("书名:%s",book->title);
book = book->next;
count++;
}
}
void release(struct Book **lbr)
{
struct Book *temp;
while(lbr != NULL)
{
temp = *lbr;
*lbr = (*lbr)->next;
free(temp);
}
}
int main(void)
{
struct Book *lbr;
int ch;
while(1)
{
printf("请问是否需要录入书籍信息(Y/N):");
do
{
ch = getchar();
}while(ch != 'Y' && ch != 'N');
if(ch = 'Y')
{
addBook(&lbr);
}
else
{
break;
}
}
printf("请问是否需要打印书籍信息(Y/N):");
do
{
ch = getchar();
}while(ch != 'Y' && ch != 'N');
if(ch = 'Y')
{
printlbr(lbr);
}
release(&lbr);
return 0;
}
if(ch = 'Y')
->
if(ch == 'Y')
第88行 第104行 两行:if(ch = 'y') 少了 ‘=’ ,应是:if (ch == 'y')
【以下回答由 GPT 生成】
问题的原因在于在addBook
函数中没有添加跳出循环的条件判断,导致程序无法跳出循环并询问是否要录入书籍信息。
为了解决该问题,可以在addBook
函数中添加一个循环,当用户输入"N"时跳出循环。具体步骤如下:
addBook
函数开始前添加一个字符串变量choice
用于接收用户的输入。char choice[2];
while
循环进行判断,当用户输入的不是"N"时继续循环,否则跳出循环。while(1)
{
printf("是否要录入书籍信息?(Y/N) ");
scanf("%s", choice);
if(strcmp(choice, "N") == 0)
{
break;
}
// 获取书籍信息的代码
}
getInput(book);
if(*lbr != NULL)
{
temp = *lbr;
*lbr = book;
book = temp;
}
else
{
*lbr = book;
book->next = NULL;
}
完成以上步骤后,重新运行程序,当输入"N"时,程序将会跳出循环,不再询问是否要录入书籍信息。完整代码如下所示:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Book
{
char title[128];
struct Book *next;
};
void addBook(struct Book **lbr);
void getInput(struct Book *book);
void printlbr(struct Book *lbr);
void release(struct Book **lbr);
void addBook(struct Book **lbr)
{
struct Book *book, *temp;
char choice[2];
book = (struct Book *)malloc(sizeof(struct Book));
if(book == NULL)
{
printf("内存分配失败\n");
exit(1);
}
while(1)
{
printf("是否要录入书籍信息?(Y/N) ");
scanf("%s", choice);
if(strcmp(choice, "N") == 0)
{
break;
}
getInput(book);
if(*lbr != NULL)
{
temp = *lbr;
*lbr = book;
book = temp;
}
else
{
*lbr = book;
book->next = NULL;
}
}
}
void getInput(struct Book *book)
{
printf("请输入书名:");
scanf("%s", book->title);
}
void printlbr(struct Book *lbr)
{
struct Book *book;
int count = 1;
book = lbr;
while(book != NULL)
{
printf("Book%d", count);
printf("书名:%s", book->title);
book = book->next;
}
// ...其他代码
}
希望以上解决方案能够帮助到您,如果有任何疑问,请随时询问。
【相关推荐】