请教大神这个程序为什么运行时无输出?

#include< stdio.h>
#include< string.h>
#define q 20
char C[q];
int main()
{ int S;
for ( int i=0;i<=5;i++)
{while((S=getchar())!='2')
C[i]=S;}
for( int i=0;i<=strlen(C);i++)
printf("%c",C[i]);
}

首先程序能输出,看你键盘输入的数据了:
外层循环为5,
内层有个while循环,当键盘输入不为2时就继续接受输入,为二时将2的上一个字符赋给c[i];
就是每当内层while接收键盘输入,每输入一个2就跳出while,执行一次for循环,不为2就一直执行while接收键盘输入。
接收5个2后外层for循环就执行完了。程序结束。

测试数据输入12123242542778792 有5个2,恰好执行程序,多了后面的不执行,少了程序还需接收键盘输入。
图片说明

因为换行符\n也是会getchar()获取到,所以你数组中全是换行符,有几个就换几行,改为如下代码
while((S=getchar())!='2')
if(S!='\n')
C[i]=S;

测试代码如下:

 #include<stdio.h>
#include<string.h>
#define q 20
char C[q];
int main()
{   int S;
    for ( int i=0;i<=5;i++)
    {

        while((S=getchar())!='2')//这里有个死循环,只要输入字符不为'2', 就一直等待输入 
            C[i]=S;

        printf("第%d次键盘接收字符为'2'时记录前一个字符%c到c[]中\n",i,C[i]);
    }
    for( int i=0;i<strlen(C);i++)
    {
        printf("\n第%d次输入的单字符为%c",i,C[i]);
    }
    printf("\n最终获取结果为:%s\n",C); 
}

图片说明
换行符、空格不影响:
椭圆指代空格;
矩形指代换行;

图片说明

 #include<stdio.h> 
#include<string.h>
#define q 20
char C[q];
int main() 
{   
    printf("S 这个变量定义成char 就支持字符型了,int 太局限不过也可以。\n");
    int S,i=0; 
    int D;
    while((S=getchar())!='3')
    {
        C[i]=S; 
    }
    printf("输出如下:");
    putchar(C[0]);
}

测试数据:
图片说明