C语言读取字符输入时for循环执行次数少于预期问题求解
问题根因
- 首次执行
scanf("%d", &n)读取次数值后,输入缓冲区会残留输入完成后按下的换行符 - 循环内的
%c格式符不会自动跳过空白字符,会直接把残留的换行符读取为c变量的值,导致本次循环的输入匹配逻辑不生效,最终看起来循环接收输入的次数少于设定值 - 单次
getchar()只能吃掉一个残留字符,如果输入n后存在多个空白字符(比如多余的空格、连续换行),依然无法解决问题
修复代码
int main(void) { struct node *head = NULL; int n; char c; int k; scanf("%d", &n); for (int i = 0; i < n; i++) { // %c前加空格,自动跳过所有前置空白字符(换行、空格、制表符等) scanf(" %c %d", &c, &k); if (c == 'a') { head = add(k, head); } else if (c == 'd') { head = del(k, head); } } printstruct(head); return 0; }
内容的提问来源于stack exchange,提问作者imk
相关产品推荐
相关产品推荐

