Fgets在C中崩溃

时间:2015-12-06 15:33:31

标签: c fgets

我的程序退出时没有让我为fgets写任何东西。 enter image description here enter image description here

我在程序的前面有相同的结构,它可以正常工作。

2 个答案:

答案 0 :(得分:1)

getch的调用会读取单个字符。但是,您实际上是按两个键来执行此操作:您打算提供给程序的字符,以及发送换行符的ENTER键。

因此getch会读取yY,并且换行符会保留在输入缓冲区中。然后当你调用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