c语言怎样用ctrl+z结束时不被换行符影响

该代码在zuo ye程序运行时可以通过,但是我自己输入11位数字并换行用ctrl+z结束时总是会读取到换行符,导致失败,请问怎么解决,或者zuo ye程序结束时为什么不会读到换行符。

#include
 int main(){
    char s[100];
    int i=0;
    char c;
    int a;
    while(c!=EOF)
    {
c=getchar();
s[i]=c;
i++;
    }
    if(s[11]==EOF&&s[10]!=EOF&&s[9]!=EOF&&s[8]!=EOF&&s[7]!=EOF&&s[6]!=EOF&&s[5]!=EOF&&s[4]!=EOF&&s[3]!=EOF&&s[2]!=EOF&&s[1]!=EOF&&s[0]!=EOF)
    {
        for(a=0;a<11;a++)
        {
            if(!('0'<=s[a]&&s[a]<='9'))
            printf("字符串中存在非数字字符");
            if(!('0'<=s[a]&&s[a]<='9'))
            break;
        }
        if(a==11)
        {if(s[0]=='1')
        {
         if((s[1]=='3')|(s[1]=='4')|(s[1]=='5')|(s[1]=='7')|(s[1]=='8'));
         else printf("第2位不合法");
        }
        else printf("第1位不合法");}
    }
    else
    printf("长度不合法");
    printf("%d",s[13]);
    }

大概改了下,回车作为结束符。

int main()
{
    char s[100] = {0};
    int i = 0;
    char c;
    int a;
    while ((c = getchar()) != '\n')
    {
        s[i] = c;
        i++;
    }
    if (i == 11)
    {
        for (a = 0; a < 11; a++)
        {
            if ('9' <= s[a] && s[a] <= '0')
            {
                printf("字符串中存在非数字字符\n");
                break;
            }
        }
        if (a == 11)
        {
            if (s[0] == '1')
            {
                if (!(s[1] == '3' || s[1] == '4' || s[1] == '5' || s[1] == '7' || s[1] == '8'))
                    printf("第2位不合法\n");
            }
            else
                printf("第1位不合法\n");
        }
    }
    else
        printf("长度不合法");
    printf("%s", s);
}