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
相关产品推荐
相关产品推荐

