C 在Main中工作,但不在任何其他函数中工作

C 在Main中工作,但不在任何其他函数中工作,c,gets,C,Gets,为什么GET不接受输入?代码被编译,但被跳过。请帮帮我,我是c语言的初学者 当我在main中使用get函数时,它工作得非常好 但是当我在add()中使用它时,它不起作用。背后的原因可能是什么 void add() { int a,y,found; printf("enter roll number"); scanf("%d",&a); y=0; while(y<=numberOfRecords) { if(a==s[n

为什么GET不接受输入?代码被编译,但被跳过。请帮帮我,我是c语言的初学者

当我在main中使用
get
函数时,它工作得非常好

但是当我在
add()
中使用它时,它不起作用。背后的原因可能是什么

void add()
{
    int a,y,found;
    printf("enter roll number");
    scanf("%d",&a);
    y=0;
    while(y<=numberOfRecords)
    {
        if(a==s[numberOfRecords].rollNumber)
        {
            found=1;
            break;
        }
        else
        {
            found=0;
        }
        y++;
    }

    if(found==1)
    {
        printf("this roll number have been assigned to %c",s[numberOfRecords].name);
    }
    else
    {
        s[numberOfRecords].rollNumber=a;
        printf("enter name of student\n");
        gets(s[numberOfRecords].name);
        printf("student added\n");
        numberOfRecords++;
    }

}
void add()
{
int a,y,found;
printf(“输入卷号”);
scanf(“%d”和“&a”);
y=0;

虽然(yFirst things First-NEVER使用
gets
。它会给您的程序带来一个故障点。C99中不推荐使用它,并已从该语言的C2011版本中删除。请改用
fgets

至于实际问题,它源于将
scanf
get
混合在同一个代码中。当您输入类似
5
的卷号时,您的输入流包含字符序列
{5','\n'}
scanf
函数使用
5
,但在输入流中保留换行符

然后,当您输入像“joe”这样的名称时,输入流包含字符序列
{'\n',j',o',e','\n'}
。当
获取
读取流时,它看到的第一个字符是从转鼓数输入中剩余的换行符,导致它立即返回,不再读取任何文本

有两种解决此问题的方法。您可以在
scanf
调用(丑陋)之后添加
getchar
调用,或者将
scanf
%s
转换说明符一起使用,而不是
gets
调用,这将跳过任何前导空格:

printf("enter name of student\n");
scanf("%s", s[numberOfRecords].name);
但是,为了安全起见,您应该在
%s
转换说明符上使用显式大小,以防止
scanf
读取的字符超过
名称
的大小所能容纳的字符数。因此,如果
名称
可以容纳80个字符,请使用

scanf( "%79s", s[numberOfRecords].name ); // leave 1 for the 0 terminator

不要使用
gets()
,而是使用
fgets()
。你说“它不工作”是什么意思?它到底在做什么,你没有预料到?我要冒险猜测
main
在成功使用
get
之前没有调用
scanf
。两条注释。它闻起来好像你在使用
进行基于0的数组索引时遇到了问题(y
gets
已从最新的C标准中删除,因为不可能安全地使用此函数。当然,这并不能回答您的问题,但总体而言,您使用
gets
的方法是错误的。您对发生的情况的描述并不完全正确。”然后,当您输入一个类似“joe”的名称时“没有发生。输入缓冲区仍然包含来自上一个输入的
\n
,它将被
获取的
使用,而不给用户任何输入的机会。”。