因为你那个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);
}