我不知道为什么该代码不起作用

时间:2018-07-20 15:59:12

标签: c

此代码用C语言编写。当我编译并在菜单上选择1,然后输入要求的详细信息时,它并没有问我是否要添加另一本书。

  

“您要添加其他图书吗?”   和   “如果要添加类型'Y'或将菜单返回到'N'”

我认为这是缓冲区问题,因此我添加了fflush(stdin);但这没用... 怎么了,怎么解决?

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <stdlib.h>

int count = 0;//책 갯수 세기(for count book)
char name[500][100] = { 0 }, writer[500][50] = { 0 }, publisher[500][50] = { 0 }, 
date[500][10] = { 0 }, memo[100][500] = { 0 };
unsigned int price[500][1] = { 0 };
char choice = 0;//getch 함수 선택 받기(take choice by getch())

void menu(void);
void search(void);
void add(void);
void del(void);
void save(void);
void list(void);
void memo_fun(void);

int main(void)
{
    menu();
    return 0;
}

void menu(void)
{
    system("cls");
//i am sorry it's diffrent shape from my visual stdio it was square shape(down printf_s)
    printf_s("\t\t□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□\n");
    printf_s("\t\t□■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■□\n");
    printf_s("\t\t□■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□■□\n");
    printf_s("\t\t□■□                                                            □■□\n");
    printf_s("\t\t□■□                                                            □■□\n");
    printf_s("\t\t□■□                             menu                           □■□\n");
    printf_s("\t\t□■□                                                            □■□\n");
    printf_s("\t\t□■□                                                            □■□\n");
    printf_s("\t\t□■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■□\n");
    printf_s("\t\t□■□                                                            □■□\n");
    printf_s("\t\t□■□                        1. Add book                         □■□\n");
    printf_s("\t\t□■□                                                            □■□\n");
    printf_s("\t\t□■□                        2. 도서 검색                        □■□\n");
    printf_s("\t\t□■□                                                            □■□\n");
    printf_s("\t\t□■□                        3. 도서 삭제                        □■□\n");
    printf_s("\t\t□■□                                                            □■□\n");
    printf_s("\t\t□■□                        4. 저장                             □■□\n");
    printf_s("\t\t□■□                                                            □■□\n");
    printf_s("\t\t□■□                        5. 도서 목록 출력                   □■□\n");
    printf_s("\t\t□■□                                                            □■□\n");
    printf_s("\t\t□■□                        6. 메모장 열기                      □■□\n");
    printf_s("\t\t□■□                                                            □■□\n");
    printf_s("\t\t□■□                        7. 프로그램 종료                    □■□\n");
    printf_s("\t\t□■□                                                            □■□\n");
    printf_s("\t\t□■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□■□\n");
    printf_s("\t\t□■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■□\n");
    printf_s("\t\t□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□\n");
    choice = _getch();

    switch (choice)
    {
    case '1':
        add();
        break;
    case '2':
        search();
        break;
    case '3':
        del();
        break;
    case '4':
        save();
        break;
    case '5':
        list();
        break;
    case '6':
        memo_fun();
        break;
    case '7':
        exit(0);
    default: //다른키 입력시
        menu();
    }
    menu();
}

void add(void)
{
    system("cls");
    printf_s("\t\t□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□\n");
    printf_s("\t\t□■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■□\n");
    printf_s("\t\t□■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□■□\n");
    printf_s("\t\t□■□                                                            □■□\n");
    printf_s("\t\t□■□                                                            □■□\n");
    printf_s("\t\t□■□                           Add book                         □■□\n");
    printf_s("\t\t□■□                                                            □■□\n");
    printf_s("\t\t□■□                                                            □■□\n");
    printf_s("\t\t□■□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□■□\n");
    printf_s("\t\t□■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■□\n");
    printf_s("\t\t□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□\n");
    printf_s("\n\t\t▶도서명을 입력해 주세요.\n\t\t▶");//Enter the book name
    fgets(name[count], sizeof(name[count]), stdin);
    printf_s("\n\t\t▶도서 저자를 입력해 주세요.\n\t\t▶");//Enter the book writer
    fgets(writer[count], sizeof(writer[count]), stdin);
    printf_s("\n\t\t▶도서의 출판사를 입력해 주세요.\n\t\t▶");//Enter the book publisher
    fgets(publisher[count], sizeof(publisher[count]), stdin);
    printf_s("\n\t\t▶도서의 출판일을 입력해 주세요.\n\t\t▶");//Enter the book date
    fgets(date[count], sizeof(date[count]), stdin);
    printf_s("\n\t\t▶도서의 가격을 입력해 주세요.\n\t\t▶");//Enter the book price
    scanf_s("%d", price[count]);
    count++;

    printf_s("\n\t\t▶다른 도서도 등록하시겠습니까?\n");//Do you want add other book?
    printf_s("\\t\t▶등록하시려면 Y를 메인메뉴로 돌아가시려면 N을 눌러주세요.\n");//If you want add type 'Y' or return menu to 'N'

    choice = _getche();
    if (choice == 'Y' || choice == 'y')
        add();
    else if (choice == 'N' || choice == 'n')
        menu();
}

void search(void)//i can't code down there yet...
{

}

void del(void)
{

}

void save(void)
{

}

void list(void)
{

}

void memo_fun(void)
{

}

1 个答案:

答案 0 :(得分:-1)

您有:

char choice = 0;

尝试:

int choice = 0;

原因:

_getch() returns an int and not a char

或被起诉:

replace _getch() for getchar();