在程序中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标志位