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');

    }

問題は、最後から 2 番目のレーン (レーン 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 に答える