如何摆脱vim中输入缓冲区的space/输入?

How to get rid of the space/ enter of the input buffer in vim?

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


    struct st{
        char n[100];        //Name
        char d[100];    //lastname

    } arr[4];

    void add(int *c, struct st l[])
    {
        int i                   =*c;
        int arrSize             =sizeof(arr) / sizeof(arr[0]);

        if((*c)<arrSize)
        {
            printf("Enter a name :\n");
            fgets(l[i].n, 100,stdin);
            printf("Enter lastname :\n");
            fgets(l[i].d,100,stdin);
            printf(" SUCCESS. Person was added\n");
        }
    }

    int main(void)
    {
        int ct                               =0;
        int *ctPointer=&ct;
        char response                          ;
        char endWhileloop                   =0;

        while(endWhileloop==0)
        {
            printf("To add a person to the list hit 'a'  \n");
            printf("to end program enter 'q'\n");
            fgets(&response,2,stdin);
            fseek(stdin,0,SEEK_END);

            switch(response)
            {
            case 'a':
                add(&ct, arr);
                break;

            case 'Q':
                endWhileloop=1;
                break;
            }
        }
        printf("\nbye.");
        return 0;
    }

我正在尝试 运行 我的代码在我学校的旧版本 Vim(可能是旧版本的 C)中。不幸的是我不确定它们是什么版本 运行ning

令人惊讶的是,我的代码在家中使用 vim 和 eclipse 运行。但不是来自学校

:I tried--->    fgets,  scanf("%[^\n]s",name) , scan( %c,&name), fseek(stdin,0,SEEK_END),flush(stdin); 

但对我来说没有任何效果。我想知道一些可能的解决方案。

当我 运行 来自学校(而不是家里)的代码时,在输入 'a' 之后,我的代码打印:输入姓名..(中间的行)输入姓氏。 不接受输入。

放置此行而不是 fseek

获得选项后您没有清除输入缓冲区。所以这就是没有得到第一个输入的原因。

输入第一个输入后,新行将出现在输入缓冲区中。处理完第一个输入后,缓冲区将给出 \n。

所以在得到选项后放置这一行。声明变量 int c;

while((c=getchar()) != '\n' && c!= EOF );

然后把case变成这样,

case 'a': case 'A':
         ...
         ...
case 'q': case 'Q':
         ...
         ...

要获得该选项,您可以像这样简单地使用 scanf

 scanf(" %c",&response);