1

我在阅读我的输入时遇到问题。我正在接受输入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

4

2 回答 2

0

您使用 fgetc 读取了 EOF(end-of-file) 字符,并且无法像 exit 语句那样退出循环
c != '\n'但是只要 EOF 在流中, fgetc 就不会使用它并且不会更改变量c,从而导致无限循环。

于 2013-03-23T14:05:45.543 回答
0

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

if( (c = fgetc(stdin)) == EOF )
{
    printf( "end of input\n" );
    exit( 0 );
}
于 2013-03-23T14:05:57.977 回答