如何摆脱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);
#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);