You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言终端输入p后print()函数延迟执行问题排查求助

问题根因

你的代码核心问题出在main函数的输入读取逻辑上:

  • 你使用的scanf("%c%d", &input, &n)要求每次输入必须同时匹配「字符+整数」两个参数,才会结束本次读取执行后续逻辑
  • 打印操作p不需要额外的整数参数,当你仅输入p+回车时,scanf读取到p存入input变量后,会一直阻塞等待后续的整数输入,直到你输入新内容才会结束本次读取,这就是你需要多输入一个字符才触发打印的原因
  • 额外问题:%c格式符会读取输入缓冲区残留的换行符、空格等空白字符,容易导致操作字符匹配异常。
修复方案

调整输入读取逻辑,先读取操作字符,再根据操作类型判断是否需要读取后续整数参数,同时在%c前加空格跳过所有前置空白字符:

int main(int argc, char** argv)
{
    char input;
    int n;
    char insertt = 'i';
    char printt = 'p';
    char searchh = 's';
    char deletee = 'd';
    
    struct node *root = NULL;
    // 先读操作字符,%c前加空格跳过所有空白(换行、空格等)
    while(scanf(" %c", &input) != EOF)
    {
        if(input==insertt)
        {
            scanf("%d", &n);
            root = insert(root,n);
        }
        else if(input==deletee)
        {
            scanf("%d", &n);
            root = deleteNode(root,n);
            
        }
        else if(input==searchh)
        {
            scanf("%d", &n);
            if(search(root,n))
                printf("present\n");
            else printf("absent\n");
        }
        else if(input==printt)
        {   
            print(root);
            printf("\n"); // 建议加换行,避免打印内容和后续输入提示混在一行
        }       
    }
    return 0;
}
验证说明

修改后输入p+回车就会直接触发打印逻辑,不需要额外输入内容,其他操作(i、d、s)的原有逻辑不受影响。

内容的提问来源于stack exchange,提问作者Kush Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:27:00