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

C语言字符串删字符程序中scanf读取时机异常问题求助

问题分析与解决:scanf读取字符位置导致的输入缓冲区问题

问题根源:输入缓冲区的换行残留

当你用scanf("%s", texto)读取字符串时,输入完字符串后按下的**换行符\n**会留在输入缓冲区中。之后调用scanf("%c", &del)时,它不会等待你输入新字符,而是直接读取了这个残留的换行符,导致程序误以为你要删除的是换行符,自然无法正常工作。而把scanf("%c", &del)放在读字符串之前时,此时缓冲区是空的,所以会正常等待你输入字符。

快速解决方案

有几种简单方法可以解决这个问题:

  • 在读取del之前,用getchar()吃掉残留的换行符:
    scanf("%s", texto);
    getchar(); // 清除缓冲区里的换行符
    scanf("%c", &del);
    
  • 或者在scanf的格式串前加一个空格,让它自动跳过所有空白字符(包括换行、空格、制表符):
    scanf("%s", texto);
    scanf(" %c", &del); // 注意%c前面的空格
    

顺便修正你代码里的其他问题

你的代码还有几个明显的错误,会导致程序运行异常:

  1. 注释里的循环代码有笔误:texto[j]=texto=i;应该是texto[j]=texto[i];,j=+1;应该是j+=1;
  2. 字符串结束符应该用'\0'而不是NULL(NULL是指针类型的空值,字符串结束符是字符'\0')
  3. 递归函数的返回部分没写完,而且递归逻辑可以优化,比如不需要把i和j作为参数传递(可以用静态变量或者指针参数来跟踪索引)

这里给你修正后的完整递归版本代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* deleteChar(char* texto, int n, char del) {
    static int i = 0, j = 0; // 用静态变量跟踪索引,避免作为参数传递
    if (i != n) {
        if (texto[i] != del) {
            texto[j] = texto[i];
            j++;
        }
        i++;
        deleteChar(texto, n, del);
    } else {
        // 在新的末尾添加字符串结束符
        texto[j] = '\0';
        // 重置静态变量,避免下次调用时状态残留
        i = 0;
        j = 0;
    }
    return texto;
}

int main() {
    char texto[100];
    char del;
    printf("请输入字符串:");
    scanf("%s", texto);
    printf("请输入要删除的字符:");
    scanf(" %c", &del); // 用空格跳过空白字符
    int len = strlen(texto);
    deleteChar(texto, len, del);
    printf("删除后的字符串:%s\n", texto);
    return 0;
}

如果你不想用静态变量(避免多次调用时的状态残留),也可以把i和j作为指针参数传递:

char* deleteChar(char* texto, int n, char del, int* i, int* j) {
    if (*i != n) {
        if (texto[*i] != del) {
            texto[*j] = texto[*i];
            (*j)++;
        }
        (*i)++;
        deleteChar(texto, n, del, i, j);
    } else {
        texto[*j] = '\0';
    }
    return texto;
}

// 在main里调用:
int i = 0, j = 0;
deleteChar(texto, len, del, &i, &j);

这样程序就能正常工作啦!

内容的提问来源于stack exchange,提问作者Matheus Dias

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:33:06