c语言,删除数组中的小写字母

img

img


如图,想不通为什么倒数第二行n变成--n才能完美输出



// 去除数组中的小写字母 
#include<stdio.h>
int main()
{    char s[10]={97,97,97,97,97,65,65,65,65,65};
    puts(s);
    int i,n=0;
    /*for(i=0;i<10;i++)
    scanf("%d",&s[i]);*/
    for(i=0;s[i]!='\0';i++)
    if(s[i]<'a'||s[i]>'z')
    s[n++]=s[i];
    s[--n]='\0';
    puts(s);
}
// 去除数组中的小写字母 
#include<stdio.h>
int main()
{    char s[11]={97,97,97,97,97,65,65,65,65,65}; //数组保留一个字符串结束符的空间
    puts(s);
    int i,n=0;
    /*for(i=0;i<10;i++)
    scanf("%d",&s[i]);*/
    for(i=0;s[i]!='\0';i++)
    if(s[i]<'a'||s[i]>'z')
    s[n++]=s[i];
    s[n]='\0';
    puts(s);
}


--n 和 n--是不同的,--n优先级高,n--优先级低
所以n--会让s[]先调用n,再让n--
--n会先减n,再调用