在程序中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;
}