在程序中Ctrl+Z后,怎么样再打开stdin

butnet 2007-06-06 06:44:51
我在程序里输入了Ctrl+Z后,
如果程序还用feof(stdin)返回的真,
但用getche()等,还是能读.
但就是feof(stdin)就是为真,为什么.
如果这个时候,我想再使用stdin,怎么打开?

/**
-------------------------------
写文件
2 文件不存在
-1 返回
-------------------------------
*/
int writeFile(){
char name[51];
char filename[500]="users/";
printf("写文件\n");
printf("请输入文件名(空行返回):");
if(readLine(name,50)==0)return -1;
strcpy(filename,NOWDIR);
strcat(filename,"/");
strcat(filename,name);
FILE *fp=fopen(filename,"rb");
if(!fp){
printf("文件不存在\n");
return 2;
}
fclose(fp);
CHOOSE_MODLE:
printf("1.重写文件\n");
printf("2.追加文件\n");
printf("3.返回\n");
printf("请选择:");
char c=getche();
printf("\n");
switch(c){
case '1':
fp=fopen(filename,"wb");
break;
case '2':
fp=fopen(filename,"ab");
break;
case '3':
return -1;
default:
goto CHOOSE_MODLE;
}
if(!fp){
printf("打开文件失败\n");
return 0;
}
printf("请输入文件内容(已Ctrl+Z结束):\n");
//这里第一次调用这个函数没问题,但第二次调用这个函数就直接不进入循环了.
while(!feof(stdin)){
c=getchar();
if(c=='\n')fputc('\r',fp);
fputc(c,fp);
}
fclose(fp);
/*
这里有错
error C2106: '=' : left operand must be l-value
*/
stdin=fdopen(0,"r");
return 1;
}
...全文
236 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
butnet 2007-06-06
  • 打赏
  • 举报
回复
谢谢.问题解决了.
butnet 2007-06-06
  • 打赏
  • 举报
回复
好的.我先回去试下.好了,回来.给分
jixingzhong 2007-06-06
  • 打赏
  • 举报
回复
第二次调用时候,先clear标志位
jixingzhong 2007-06-06
  • 打赏
  • 举报
回复
函数名称: clearerr
函数原型: void clearerr(FILE * fp);
函数功能: 清除文件指针错误指示器,将文件出错标志清零
函数返回:
参数说明: fp-文件的流指针
所属文件: <stdio.h>
butnet 2007-06-06
  • 打赏
  • 举报
回复
那我怎么样做,才可以让他下次调用的时候可以用呢?
huashizhixin 2007-06-06
  • 打赏
  • 举报
回复
stdin,stdout,stderror,是标准输入输出,!feof(stdin)这个代表你从键盘接收字符,当你输入Ctrl+Z时,,feof(stdin)这个返回真,并不是让你不使用键盘了输入了
butnet 2007-06-06
  • 打赏
  • 举报
回复
to:huashizhixin
但为什么还可以输入?
butnet 2007-06-06
  • 打赏
  • 举报
回复
在测试时请将stdin=fdopen(0,"r");注释掉
huashizhixin 2007-06-06
  • 打赏
  • 举报
回复
dos里面用Ctrl+Z代表文件结尾,所以这个feof(stdin)就是为真

69,371

社区成员

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

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