程序在读取输入时循环运行

时间:2013-03-23 14:00:43

标签: c input

我在阅读输入时遇到了问题。我正在获得fgetc(stdin)的输入。在方程之前,我得到了方程的数量。我的代码看起来像这样

    char c;

    for (int i = 0; i < rows; i++)
    {
        do
        {               
           c=fgetc(stdin);

           if(c!='+' && c!='-' && c!='\n' && !isspace(c) && c!='=' && c!=EOF)
           {
               l++;
               equation[l]=c;
           }

           if(/* other conditions*/) eqToGauss(i,l,s,gaussMatrix,equation,sign);

        } while (c!= '\n');

    }

问题是,在倒数第二个通道的末尾(第8道,在数字584之后),它得到'\ n',然后它将不会停止程序,但就像它在循环中运行一样。 Xcode调试进入汇编程序模式,它读取的下一个字符是'\ xff'。该算法适用于短/小方程式。

方程式后,此输入没有空行。

  
    

299 x2 + 529 x3 + 194 x5 + 282 x3 + 364 x5 + 135 x4 + 388 x1 + 492 x2 + 236 x4 + 165 x2 + 557 x1 = 135 x3 + 26 x2 + 566
    482 x2 + 582 x5 = 530 x3 + 417 x1 + 424 x3 + 147 x5 + 81 x4 + 143 x3 + 195 x4 + 8 x2 + 479


    532 x5 + 61 x4 + 318 x4 + 288 x5 + 573 x5 + 162 x4 = 99 x4 + 44 x3 + 190 x1 + 60



    224 x1 + 145 x4 + 29 x4 + 1 x1 + 549 x5 + 186 x5 + 509 x4 + 178 x4 + 321 x1 + 320 x1 = 172 x4 + 537 x5 + 15



    398 x5 + 79 x5 + 357 x2 + 153 x5 + 37 x5 + 301 x1 + 174 x5 + 111 x2 = 170 x4 + 208 x1 + 368 x3 + 14 x4 + 100 x2 + 531 x2 + 578 x3 + 510 x4 + 583 x1 + 281

    301 x5 + 394 x5 + 272 x3 + 514 x5 = 412 x2 + 288 x4 + 182 x5 + 218 x1 + 210


    331 x5 + 333 x4 + 376 x2 + 490 x5 + 275 x5 + 105 x4 + 498 x2 + 152 x3 + 51 x2 = 328 x4 + 135 x5 + 452 x4 + 62 x5 + 533 x1 + 261 x3 + 527 x1 + 124 x5 + 295 x4 + 532 x2 + 4

    388 x2 + 415 x4 + 172 x4 + 403 x5 + 30 x1 = 511 x3 + 231 x5 + 104 x2 + 516 x2 + 380 x2 + 274 x5 + 522 x2 + 584


    554 x1 + 434 x4 + 288 x5 + 98 x2 + 85 x5 + 413 x2 + 40 x1 = 584 x3 + 113 x2 + 262 x5 + 348 x5 + 285 x5 + 328 x4 + 351 x4 + 77 x5 + 149 x5 + 170 x1 + 203

  

2 个答案:

答案 0 :(得分:0)

您使用fgetc读取EOF(文件结束)字符并且无法退出循环,因为退出语句
c != '\n',但只要EOF在流中,fgetc不会消耗它,也不会改变变量c,从而导致无限循环。

答案 1 :(得分:0)

你需要在fgetc()上测试EOF - 0xFF意味着文件的结尾,但我没有在你的代码片段中看到任何停止读取EOF输入的内容。

if( (c = fgetc(stdin)) == EOF )
{
    printf( "end of input\n" );
    exit( 0 );
}