使用while((c=getchar())!='\n')时,陷入死循环。

问题遇到的现象和发生背景

想从stdin中读取信息,第一次读取可以成功,之后就陷入死循环。

问题相关代码,请勿粘贴截图
while(1){
        train_t train;    //自定义的小火车结构
        int count = 1;
        char buf[1024]={0};
        int i = 0;
        printf("Please input your order: ");
    char c;
    while((c = getchar()) != '\n'&&i<1024){     // 1024后面加的,不加是buf溢出导致段错误,加了就是死循环。
        printf("c=%c,zhelima?\n", c);
        printf("i=%d\n",i);
        buf[i++]=c;
    }
    if(strlen(buf)>0){      //这些代码就无关了
        bzero(&train, sizeof(train_t));
        tok_t *tok = calloc(1,sizeof(tok_t));
        int ret = analysis(buf,tok,i);//分析指令,将分析结果赋值给tok_t结构体对应属性
        printf("ret = %d\n",ret);//查看分析是否成功,用于bug调试
        train.dataLength = sizeof(tok_t);
        if(ret == 1){//返回值为1说明分析成功,进行下一步操作
            for(int i=0;i<tok->argc;i++){
                printf("argv[%d] = %s\n",i,tok->argv[i]);
            }
            printf("type = %d\n",tok->type);
            memcpy(train.buf, tok, train.dataLength);
            send(clientFd, &train, sizeof(train.dataLength) + train.dataLength, MSG_NOSIGNAL);
            //2.ls 用于获取当前文件夹下所有文件
            //2.ls test1 用于获取当前文件夹中test1文件夹里的所有文件
            if(tok->type == 2){
                recvFile(clientFd, tok);
                sleep(5);
            }
            //3.puts file1 上传文件
            if(tok->type == 3){
                putsFileClient(tok, clientFd);
            }
            //4.gets file1 下载文件,断点下载
            if(tok->type == 4){
                recvFile(clientFd, tok);
            }
            //5.remove
            //6.pwd
            if(tok->type == 6){
                recvFile(clientFd, tok);
                sleep(5);
            }
            //7.mkdir
            //8.rmdir
        }
    }
    }

运行结果及报错内容

c=�,zhelima?
i=1015
c=�,zhelima?
i=1016
c=�,zhelima?
i=1017
c=�,zhelima?
i=1018
c=�,zhelima?
i=1019
c=�,zhelima?
i=1020
c=�,zhelima?
i=1021
c=�,zhelima?
i=1022
c=�,zhelima?
i=1023
analysis
ret = -1
Please input your order: c=�,zhelima?
i=0
c=�,zhelima?
i=1
c=�,zhe^C

我的解答思路和尝试过的方法

试过每次循环给c赋初值0,但没用,应该是getchar()不知道从哪读了些东西。还试过给文件末尾加了一个while((c=getchar())!=‘\n')的空循环也没用。

我想要达到的结果

输入那一段看上去没问题,你应该是输入了一个字符后就按回车了吧,试试下面的
Please input your order:123456789[回车]
只有你输入回车后,getchar才从stdin读入字符,每次一个直到回车