abacoo 发表于 2020-12-11 19:49

这个题中的EOF应该怎么用。下面有我写的代码。

输入一个矩阵,要求用“#”为该矩阵加花边,最后一行后输出换行样例:输入:
123456789
输出:######123##456##789######
数据说明:
矩阵长不超过25,高不超过25每行输入后都有换行提示:矩阵内不保证总是数字,保证没有空格。for(;;)循环的判断条件为“(某种输入方式)!=EOF”时,这是一种一直把输入内容全部读完的方式

#include <stdio.h>int main(){        char str;        int i,j,m,l,n;        for(i=0;scanf("%c",&str)!=EOF;i++)        for(j=0;scanf("%c",&str)!=EOF;j++)        {                        }        for(n=0;n<=j+1;n++)        printf("#");        printf("\n");        for(m=0;m<=j;m++)        {        printf("#");        for(l=0;l<=j;l++)        printf("%c",&str);        printf("#");        printf("\n");    }        for(n=0;n<=j;n++)        printf("#");        return 0;}EOF是当遇到换行符\n和'\0'的时候终止输入。这里我想通过两个for循环完成这个二维数组的赋值,但是当我运行后,在窗口中输入1 2 3 41 2 3 41 2 3 41 2 3 4
后,不能出现运行结果。要怎么通过这个EOF编写代码才能读入完整的二维数组??

abacoo 发表于 2020-12-11 19:51

#include <stdio.h>
int main()
{
        char str;
        int i,j,m,l,n;
        for(i=0;scanf("%c",&str)!=EOF;i++)
        for(j=0;scanf("%c",&str)!=EOF;j++)
        {
               
        }
        for(n=0;n<=j+1;n++)
        printf("#");
        printf("\n");
        for(m=0;m<=j;m++)
        {
        printf("#");
        for(l=0;l<=j;l++)
        printf("%c",&str);
        printf("#");
        printf("\n");
    }
        for(n=0;n<=j;n++)
        printf("#");
        return 0;
}

abacoo 发表于 2020-12-11 19:51

EOF是当遇到换行符\n和'\0'的时候终止输入。
这里我想通过两个for循环完成这个二维数组的赋值,但是当我运行后,在窗口中输入
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4

后,不能出现运行结果。要怎么通过这个EOF编写代码才能读入完整的二维数组??

无敌小车 发表于 2020-12-11 22:34

可以把eof放在while判断里,像这样
while(getChar()!=EOF)

windlans 发表于 2020-12-11 23:43

接着楼上的回答我再补充一句,在输入的最后一行结束后(此时未换行)输入ENTER键,新起一行,再输入ctrl+z,再输入时ENTER键即可这个时候便可以终止EOF
页: [1]
查看完整版本: 这个题中的EOF应该怎么用。下面有我写的代码。