求解c语言中提取字符中的字母时中间有数字就会隔断后面的提取字母

 

因为你那个k和i是同时加的,所以就导致中间是数字的那几个序号没有保存字符,导致后面的英文都输出不了

首先,你的st1也需要初始化,如果你不进行初始化,字符组后面的值未知,是有可能出现在判断范围的

第二,你的循环有问题,当你的字符不符合条件时,你的k在增加,比如a2b,那么st2[0]='a',st2[2]='b',st2[1]已经被你跳过了

最后,如果你是用%s直接输出st2,最好在st2要输出的字符最后加一个字符结束符'\0'

参考代码如下:

#include<stdio.h>
int main(){
    char st1[80]={0}, st2[80] = {0};
    int i, k;
    printf("请输入一串字符(小于80个),然后按回车键。\n"); 
    scanf("%s", st1);
    printf("您输入的一串字符是: %s\n", st1);
    for(i = 0,k = 0; i < 80; i++){
        if('a' <= st1[i] && st1[i] <= 'z' || 'A' <= st1[i] && st1[i] <= 'Z')
            st2[k++] = st1[i];
    }
    st2[k] = '\0';
    printf("%s", st2);