"B1ff filter" reads and returns message
Unused: we don't use j, and we don't need to include &lt;stdbool.h&gt;, &lt;stdlib.h&gt; or &lt;time.h&gt;.
We have two loops - one that reads input into message[] and one that converts and outputs the content of message[].  We can avoid the storage by combining the two loops into one:
while ((ch = getchar()) != '\n') {
    ch = toupper(ch);

    switch (ch) {
        /* ... */
    }

There's a couple of fixes needed above.  Firstly, we need to check that ch is not EOF, or we'll loop indefinitely if the input stream is closed before the first newline.  ch needs to be an int value here, as the distinction between a character and end-of-file is lost when we narrow to char.
Secondly, ch holds values of a (possibly signed) char, but toupper() (like all the &lt;ctype.h&gt; functions) works on an int representation of unsigned char value.  Fixing those gives us:
int ch;
while ((ch = getchar()) != '\n' &amp;&amp; ch != EOF) {
    ch = toupper((unsigned char)ch);


Instead of the switch, we might consider a table-driven approach.  That would work something like this:
char conversions[UCHAR_MAX];
/* identity mapping for most chars */
for (unsigned i = 0;  i &lt; sizeof conversions;  ++i) {
    conversions[i] = (char)i;
}
/* exceptions */
conversions['S'] = '5';
conversions['O'] = '0';
conversions['I'] = '1';
conversions['E'] = '3';
conversions['B'] = '8';
conversions['A'] = '4';


int ch;
while ((ch = getchar()) != '\n' &amp;&amp; ch != EOF) {
    putchar(conversions[toupper(ch)]);
}


Finally, puts() is simpler than printf() for simple strings ending in newline, and we don't need to return 0 from main().

Modified code
#include &lt;ctype.h&gt;
#include &lt;limits.h&gt;
#include &lt;stdio.h&gt;

int main(void)
{
    char conversions[UCHAR_MAX];
    /* identity mapping for most chars */
    for (unsigned i = 0;  i &lt; sizeof conversions;  ++i) {
        conversions[i] = (char)i;
    }
    /* exceptions */
    conversions['S'] = '5';
    conversions['O'] = '0';
    conversions['I'] = '1';
    conversions['E'] = '3';
    conversions['B'] = '8';
    conversions['A'] = '4';


    printf(&quot;Enter a message: &quot;);

    int ch;
    while ((ch = getchar()) != '\n' &amp;&amp; ch != EOF) {
        putchar(conversions[toupper(ch)]);
    }

    // Finish the sentence
    puts(&quot;!!!!!!!!!!!!!!&quot;);
}