搜索
查看: 2112|回复: 13
打印 上一主题 下一主题

关于EOF

[复制链接]
跳转到指定楼层
楼主
发表于 2012-12-12 13:27:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
#include <stdio.h>
#include <string.h>
main()
{ char a[100][100];
int i,B[100],p=0;
    gets(a[0]);
    B[0]=strlen(a[0]);
for(i=1;a[i-1][0]!=EOF;i++)
  {
        gets(a[i]);
  B[i]=strlen(a[i]);
        }
    for(i=i-1;i<100;i++)
  B[i]=0;
    for(i=0;i<100;i++)
  p=max(B[i],p);
    for(i=0;i<100;i++)
  if(B[i]==p)
        puts(a[i]);
sleep(5000);
return 0;
}
max(int x,int y)
{ if(x>y) return x;
else return y;
}

最佳答案

查看完整内容

eof一般用于文件输入和输出,你这段程序用的是屏幕输入和输出
沙发
发表于 2012-12-12 13:27:25 来自手机 | 只看该作者
eof一般用于文件输入和输出,你这段程序用的是屏幕输入和输出来自: Android客户端
板凳
 楼主| 发表于 2012-12-12 13:28:01 | 只看该作者
这个程序不知道为什么运行不了啊 求解释
地板
 楼主| 发表于 2012-12-12 13:36:01 | 只看该作者
程序要求是输入一段文字 输完一句用回车 最后输出最长的那一句
5#
 楼主| 发表于 2012-12-14 10:53:43 | 只看该作者
啊哈磊 发表于 2012-12-13 10:44
eof一般用于文件输入和输出,你这段程序用的是屏幕输入和输出

也就是说 只有编写应用的时候才能用到吗?
6#
发表于 2013-6-12 11:18:36 | 只看该作者
381621800 发表于 2012-12-14 10:53
也就是说 只有编写应用的时候才能用到吗?

是的   通过文件读写才能使用EOF     对于屏幕输入时不能使用的!感谢您的支持,祝学习愉快!
7#
发表于 2013-6-12 11:54:40 | 只看该作者
回遗未来 发表于 2013-6-12 11:18
是的   通过文件读写才能使用EOF     对于屏幕输入时不能使用的!感谢您的支持,祝学习愉快!

屏幕输入的时候可以输入EOF的

回车-ctrl+z-回车 (windows)

点评

额 Ztrl+z 终止命令。。。。。  发表于 2013-6-12 12:54
8#
发表于 2013-6-12 12:06:33 | 只看该作者
这段代码的问题在于
gets的行为是,如果在读取过程中遇到了EOF,那么设置feof标识;如果读到的第一个字符就是EOF,那么返回空指针。
但是gets存储的字符串中是不会含有EOF的,所以a[i-1][0] != EOF这个判断是无效的

此外,不该使用gets,有严重的安全性漏洞,在C99中舍弃,在C11中已经被删除。在这个例子里,应该使用
  1. fgets(a[i], 100, stdin);
复制代码
9#
发表于 2013-12-12 09:01:37 | 只看该作者
rosynirvana 发表于 2013-6-12 11:54
屏幕输入的时候可以输入EOF的

回车-ctrl+z-回车 (windows)

那,为什么按<Ctrl>+C,就会关闭黑窗口呢?
10#
发表于 2013-12-12 09:35:20 | 只看该作者
4399APPLE 发表于 2013-12-12 09:01
那,为什么按+C,就会关闭黑窗口呢?

ctrl+c向终端发送一个终止信号,如果不捕获这个信号就会杀掉进程,控制权还给操作系统,系统就会关闭终端
11#
发表于 2013-12-12 10:28:19 | 只看该作者
rosynirvana 发表于 2013-12-12 09:35
ctrl+c向终端发送一个终止信号,如果不捕获这个信号就会杀掉进程,控制权还给操作系统,系统就会关闭终端

那要如何捕获它?
12#
发表于 2013-12-12 10:28:49 | 只看该作者
rosynirvana 发表于 2013-12-12 09:35
ctrl+c向终端发送一个终止信号,如果不捕获这个信号就会杀掉进程,控制权还给操作系统,系统就会关闭终端

好像记得以前看过的,现在又忘了、、、
13#
发表于 2013-12-12 12:20:49 | 只看该作者
4399APPLE 发表于 2013-12-12 10:28
那要如何捕获它?

大概你想要的是这样的

  1. #include <signal.h>
  2. #include <stdio.h>


  3. void myterm(int n)
  4. {
  5.   puts("trapped!");
  6. }

  7. int main()
  8. {
  9.   while(1){
  10.     signal(SIGINT, myterm);
  11.   }
  12.   return 0;
  13. }
复制代码
14#
发表于 2013-12-12 12:49:59 | 只看该作者
rosynirvana 发表于 2013-12-12 12:20
大概你想要的是这样的

对了!!!就是这个!!!用于发送信号的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表