首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

在程序中Ctrl+Z后,如何样再打开stdin

2012-03-29 
在程序中Ctrl+Z后,怎么样再打开stdin我在程序里输入了Ctrl+Z后,如果程序还用feof(stdin)返回的真,但用getc

在程序中Ctrl+Z后,怎么样再打开stdin
我在程序里输入了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;
}

[解决办法]
dos里面用Ctrl+Z代表文件结尾,所以这个feof(stdin)就是为真
[解决办法]
stdin,stdout,stderror,是标准输入输出,!feof(stdin)这个代表你从键盘接收字符,当你输入Ctrl+Z时,,feof(stdin)这个返回真,并不是让你不使用键盘了输入了
[解决办法]
函数名称: clearerr
函数原型: void clearerr(FILE * fp);
函数功能: 清除文件指针错误指示器,将文件出错标志清零
函数返回:
参数说明: fp-文件的流指针
所属文件: <stdio.h>
[解决办法]
第二次调用时候,先clear标志位

热点排行