我的程序退出时没有让我为fgets写任何东西。
我在程序的前面有相同的结构,它可以正常工作。
答案 0 :(得分:1)
对getch
的调用会读取单个字符。但是,您实际上是按两个键来执行此操作:您打算提供给程序的字符,以及发送换行符的ENTER键。
因此getch
会读取y
或Y
,并且换行符会保留在输入缓冲区中。然后当你调用fgets
时,它会一直读到它遇到换行符。由于缓冲区中有换行符,它只读取换行符并退出该函数。这就是为什么你没有机会输入任何东西。
您需要在第一个之后立即向getch
添加额外的电话来阅读换行符并将其丢弃。
或者,您可以调用fflush(stdin);
来刷新输入缓冲区。请注意,该标准不支持在fflush
上调用stdin
,但是Windows(您在调用getch
时显然使用它)确实支持此作为扩展。
答案 1 :(得分:0)
rf = getch() ;
while ( rf != 'y' || rf != 'Y' || rf != 'n' || rf!= 'N')
{
rf = getch() ;
/* Reading from a file */
if (rf == 'y' || rf == 'Y')
{
FILE *f ;
printf("Enter the direction to your file\n") ;
fgets(readfilename,1024,stdin) ;
readfilename[strlen(readfilename)-1] = 0 ; /* removing the trailing '\n' */
f=fopen(readfilename, "r") ;
if ( f == NULL)
return 3 ; /* Unable to open the reading file */
fgets(s, 576, f) ;
invalidcell(s) ; /* return 4: invalid cell */
/* Copying file into array and converting char's into int's */
for( i=0; s[i] ; ++i)
oldb[i/24][i%24] = s[i] - '0';
fclose(f) ;
break ;
}
But I have the same thing and it is working, it letts to stdin