我在阅读输入时遇到了问题。我正在获得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
答案 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 );
}