C输入前退出功能

Fre*_*son 1 c

我正在为一个初级C编程课做一个项目,我应该为公司制作一个基本的订购系统.我的一个函数有问题,它作为一个单独的程序工作正常,但作为订购程序中的一个函数,它不会让我在退出函数之前输入一个新项目.然而,似乎在获得(项目)之后运行所有内容; 因为每次运行它都会添加\n.

这是我的代码:

do{
printf("Menu here");
scanf("%c", &menu);
switch(menu)
{
    case 'A':
        listItem();
        break;

    case 'B':
        addItem();
        break;

    ...

    case 'X':
        break;
}

printf("Press Enter to continue.");
scanf("%c%c", &enter, &enter);
system("cls");

}while(menu != 'X');


void addItem()
{
    char item[30];
    printf("\nAdd new item: ");
    gets(item);
    FILE * output;
    output = fopen("items.txt", "a");
    fputs(item, output);
    fprintf(output, "\n");
    fclose(output);
}
Run Code Online (Sandbox Code Playgroud)

转换后的东西是我的老师认为是一个丑陋而有效的方法来解决这个事实,即我们没有深入研究他在本课程中所谓的"C输入的怪癖".

我很感谢任何提示和答案,并会在必要时提供更多我的代码.

caf*_*caf 5

这是怎么回事:

  1. 程序打印菜单.
    • 用户输入"B <enter>".
    • scanf读取B角色.将<enter>仍然在等待输入流.
    • addItem 叫做.
    • gets()被调用,读取<enter>仍在等待的内容,并返回一个空行.

在阅读菜单选择字符后,您可以通过阅读并放弃所有内容(包括下一个换行符)来修复它scanf:

int c;

printf("Menu here");
scanf("%c", &menu);
do {
    c = getchar();
} while (c != EOF && c != '\n');
Run Code Online (Sandbox Code Playgroud)