while (scanf_s("%s", arr) != EOF) {}循环结束问题

问题遇到的现象和发生背景

题目描述
字符串的输入输出处理。
输入
第一行是一个正整数N,最大为100。之后是多行字符串(行数大于N), 每一行字符串可能含有空格,字符数不超过1000。
输出
先将输入中的前N行字符串(可能含有空格)原样输出,再将余下的字符串(不含有空格)以空格或回车分割依次按行输出。每行输出之间输出一个空行。
样例输入
2
http://www.dotcpp.com/ DOTCPP
A C M
D O T CPP
样例输出
http://www.dotcpp.com/ DOTCPP

A C M

D

O

T

CPP

#include <string.h>
#include<stdio.h>
int main()
{
    int    a;
    char    arr[1001];
    scanf_s("%d", &a);
    getchar();
    for (int i = 0; i < a; i++) {
        gets_s(arr);
        puts(arr);
        printf("\n");
    }
    while (scanf_s("%s", arr) != EOF) {
        printf("%s\n", arr);
        printf("\n");
    }
    return 0;
}

img

结束时按ctrl+z和回车没有用

你可以复制然后去运行界面测试看看

ctrl+z又不是可见字符,你当然敲不进去
EOF是文件结尾,你正常从键盘录入,是不可能录入这个符号的