#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'后我的代码打印:输入名称..(中间的行)输入姓氏。 没有输入。
答案 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);