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

时间:2015-03-14 04:04:31

标签: c buffer

    #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)中运行我的代码。不幸的是,我不确定他们正在运行什么版本

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

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

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

当我从学校(不是家)运行我的代码时,输​​入'a'后我的代码打印:输入名称..(中间的行)输入姓氏。 没有输入。

1 个答案:

答案 0 :(得分:0)

放置此行而不是fseek

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

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

所以在获得选项后放置此行。声明变量int c;

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

然后将case变成这样,

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

要获得该选项,您只需使用此类scanf

 scanf(" %c",&response);