C 的EOF 问题

僵尸男孩 2014-02-18 10:51:45
// 回音程序.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "stdio.h"

int main(int argc, char* argv[])
{
char s[10];
while (1)
{
if(scanf("%s",s)==EOF)
break;
printf("%s\n",s);
}
return 0;
}

这段小程序 运行后 为什么每次输入EOF后 点回车不能退出循环? 必须要再一次输出EOF点回车才能退出循环啊? 如果换成if(scanf("%d",n)==EOF) 这样的话 输入一次EOF就可以退出循环 求解!
...全文
168 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-02-21
  • 打赏
  • 举报
回复
Enter,Ctrl+Z,Enter
loe 2014-02-21
  • 打赏
  • 举报
回复
嗯,刚才确认了一下用vs 2010,ctrl+z一次就退出了,vc++ 6.0问题就是多。。
赵4老师 2014-02-21
  • 打赏
  • 举报
回复
Linux下不是Ctrl+Z是Ctrl+D
loe 2014-02-21
  • 打赏
  • 举报
回复
我认为这是编译器的事儿,我用的vc++ 6.0也是这种情况,第一次打ctrl+z 其实都没有进入键盘缓冲区,建议用高版本的,比如vs 2012可能就不会有这个问题(我没有2012实验不了,估计2楼没出现问题估计就是用的高版本的),linux 下的crtl+z就直接退出程序了
twhold 2014-02-20
  • 打赏
  • 举报
回复
if(scanf("%s",s)==EOF) 这句 scanf返回成功输入的变量个数,相当于用 输入几个参数和EOF作比较,而不是输入什么和EOF做比较
虚幻专家 2014-02-20
  • 打赏
  • 举报
回复
应该把这句拆开, scanf("%s",s)
虚幻专家 2014-02-20
  • 打赏
  • 举报
回复
楼主不小心把,函数返回值,当成输入的值了
僵尸男孩 2014-02-19
  • 打赏
  • 举报
回复
引用 3 楼 baichi4141 的回复:
宏EOF代表没有接收到数据,一般定义为-1 如果你输入EOF,你输入的是三个字符数据,如果你输入-1,你输入的是一个整数数据,只有当你输入Ctrl+Z的时候,函数才会返回宏EOF或者说整数-1 楼主的问题在于没有分清函数返回值和函数输出
我就是输入的ctrl +z
僵尸男孩 2014-02-19
  • 打赏
  • 举报
回复
引用 楼主 u011488256 的回复:
// 回音程序.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "stdio.h"

int main(int argc, char* argv[])
{
	char s[10];
	while (1)
	{
		if(scanf("%s",s)==EOF)
			break;
		printf("%s\n",s);
	}
	return 0;
}
这段小程序 运行后 为什么每次输入EOF后 点回车不能退出循环? 必须要再一次输出EOF点回车才能退出循环啊? 如果换成if(scanf("%d",n)==EOF) 这样的话 输入一次EOF就可以退出循环 求解!
我就是输入的 ctrl +z 啊 为什么我这里两次 我这里VC环境
baichi4141 2014-02-19
  • 打赏
  • 举报
回复
宏EOF代表没有接收到数据,一般定义为-1 如果你输入EOF,你输入的是三个字符数据,如果你输入-1,你输入的是一个整数数据,只有当你输入Ctrl+Z的时候,函数才会返回宏EOF或者说整数-1 楼主的问题在于没有分清函数返回值和函数输出
MewX 2014-02-18
  • 打赏
  • 举报
回复
帮你程序改短了一点,功能是一样的。 哦对了,EOF的输入方式是Ctrl+Z你知道吧。
#include "stdio.h"
 
int main( )
{
    char s[ 10 ];
    while( ~scanf( "%s", s ) )
        printf("%s\n",s);
    return 0;
}
MewX 2014-02-18
  • 打赏
  • 举报
回复
我这边测试没有问题啊。 测试输入输出: L:\>test 123 123 ^Z L:\>test ^Z

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧