| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1854 人关注过本帖
标题:读取输入行,直至达到文件尾结束输入,这个为什么不能实现结束输入
只看楼主 加入收藏
小白报道
Rank: 2
等 级:论坛游民
帖 子:42
专家分:10
注 册:2019-9-17
结帖率:62.5%
收藏
已结贴  问题点数:20 回复次数:5 
读取输入行,直至达到文件尾结束输入,这个为什么不能实现结束输入
#include<stdio.h>
#include<string.h>
int main()
{
    int i,j,m=0,n,k=1;
    char  ch[5][1000];
    for (i = 0; i < 5;i++)
    {
        for (j = 0; j < 1000; j++)
        {
            ch[i][j] = getchar();
            if (ch[i][j] == EOF)
            {
                break;
                k -= 1;
            }
        }
        if (m < strlen(ch[i]))
        {
            m = strlen(ch[i]);
            n = i;
        }
        if (k == 0)
            break;
    }
    for (i = 0; i < 1000; i++)
    {
        printf("%c", ch[n][i]);
    }
    return 0;
}
搜索更多相关主题的帖子: 文件 读取 结束 for 输入 
2019-11-06 12:03
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:20 
根本看不懂你想干什么,要不你将题目的要求贴出来

ch[i][j] = getchar();
getchar() 返回值的类型是 int,不是 char,仅当其返回值不是EOF时,其低字节才保存着接受到的字符值。
尤其是char为无符号实现时(linux上的gcc默认char是无符号的,windows上的vc默认char是具符号的,但可以通过编译参数修改设置),将EOF截断为char后就不再与EOF相等了。

break;
k -= 1;
break 后的语句不可能被执行。

if (m < strlen(ch[i]))
strlen要求其参数必须是 '\0' 结尾的,否则行为未定义。

if (k == 0)
代码中根本没有设置 k 为 0 的语句

printf("%c", ch[n][i]);
n 可能未赋值
ch[n][i] 可能未赋值
那么读取它们是未定义行为。
2019-11-06 12:30
小白报道
Rank: 2
等 级:论坛游民
帖 子:42
专家分:10
注 册:2019-9-17
收藏
得分:0 
回复 2楼 rjsp
题目:编写一个程序,一行行的读取输入行,直至到达文件尾。算出每行输入行的长度,然后把最长的那行打印出来。为了简单起见,你可以假定所有的输入行均不超过1000个字符。     上面这个我想把字符输入到二位数组当中,之后比较字符的长度,但程序运行之后,输入字符结束不了......
2019-11-06 19:38
小白报道
Rank: 2
等 级:论坛游民
帖 子:42
专家分:10
注 册:2019-9-17
收藏
得分:0 
回复 2楼 rjsp
这个if语句中
 if (ch[i][j] == EOF)
             {
                 break;
                 k -= 1;
             }
不能实现字符的结束输入吗
2019-11-06 19:41
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:0 
以下是引用小白报道在2019-11-6 19:38:20的发言:

但程序运行之后,输入字符结束不了......
听不懂,你是不是不会操作windows/linux的控制台

程序代码:
#include <stdio.h>
#include <string.h>

int main( void )
{
    char maxstr[1002] = "\n";
    size_t maxlen = 0;
    for( char line[1002]; fgets(line,sizeof(line),stdin); )
    {
        size_t len = strlen( line );
        if( len > maxlen )
        {
            maxlen = len;
            strcpy( maxstr, line );
        }
    }
    printf( "%s", maxstr );
}



2019-11-06 22:16
小白报道
Rank: 2
等 级:论坛游民
帖 子:42
专家分:10
注 册:2019-9-17
收藏
得分:0 
回复 5楼 rjsp
不太懂EOF和控制字符串的输入输出...  不过还是  感谢感谢
2019-11-06 22:26
快速回复:读取输入行,直至达到文件尾结束输入,这个为什么不能实现结束输入
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019236 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved