执行文件I / O时出现意外的零(Unexpected zeros when performing file I/O)

编程入门 行业动态 更新时间:2024-10-26 18:28:55
执行文件I / O时出现意外的零(Unexpected zeros when performing file I/O)

我有一个程序,我想从文本源文件中的行中取出单个字符,并将它们存储在二维数组中(我称之为numbers[][N] )。 在我的源文件中的所有字符都存储在numbers ,我将N单独的numbers列加到另一个数组中,称为temp[N] 。

问题是,在我确定源文本中的最长行和总行数后,我重置了我的文件指针并使用fgetc()拉入一个字符并将它们的值存储在一个numbers元素中。 但是在这个实现中,我得到了存储在numbers中的奇数字符串零(整数字面0 ),其中应该存在非零值。 为什么?

可以在此处找到源文件sumSource.txt文本

注意:我已经设法用不同的实现来引发适当的行为,但我想知道为什么这段代码给了我奇怪的零字符串。

#include <stdio.h> // define a sourcefile here #define SOURCE_FILE "/home/demiurge/play/euler/sumSource.txt" int main(void) { // generic indices int i, j, k; // open a stream to sourcefile here FILE* _Fsource = fopen( SOURCE_FILE, "r" ); // Determine the longest number of digits in any line // _Fsource and the total number of terms in the sum. int ROWS = 0; int COLS = 0; // Recent char from sourcefile int c; do { // I'm doing this do/while statement so that 'count' is automatic int count = 0; while ( ( c = fgetc( _Fsource ) ) != EOF ) { if( c == '\n' ) { ROWS++; if( COLS < count ) { COLS = count; } count = 0; } else { count++; } } } while ( c != EOF ); // Reset position of _Fsource to start of // sourcefile fseek( _Fsource, 0L, SEEK_SET ); // create a storage mechanism for // the partial sum of the numbers // in sourcefile int numbers[ROWS][COLS]; int temp[COLS]; // set every element in temp to zero for ( i = 0; i < COLS; i++ ) { temp[i] = 0; } // THINGS GO PEAR-SHAPED HERE; WHY? for ( i = 0; i < ROWS; i++ ) { for ( j = 0; j < COLS && \ ( c = fgetc( _Fsource ) ) != '\n'; j++ ) { numbers[i][j] = ( c - '0' ); } } for ( i = 0; i < ROWS; i++ ) { for ( j = 0; j < COLS; j++ ) { temp[j] += numbers[i][j]; } } return 0; }

I have a program that I would like to take individual characters from lines in a text source file and store them in a two-dimensional array (which I call numbers[][N]). After all the chars from my source file are stored in numbers, I sum the N individual columns of numbers into another array, called temp[N].

The problem is, after I determine the longest line in my source text and the total number of lines, I reset my file pointer and use fgetc() to pull in the individual characters one at a time and store their values in an element of numbers. But in this implementation I'm getting odd strings of zeros (integer literal 0) stored in numbers where there should be non-zero values. Why?

Text of the source file sumSource.txt can be found here

Note: I've managed to induce the appropriate behavior with a different implementation, but I want to know why this code gives me weird strings of zeros.

#include <stdio.h> // define a sourcefile here #define SOURCE_FILE "/home/demiurge/play/euler/sumSource.txt" int main(void) { // generic indices int i, j, k; // open a stream to sourcefile here FILE* _Fsource = fopen( SOURCE_FILE, "r" ); // Determine the longest number of digits in any line // _Fsource and the total number of terms in the sum. int ROWS = 0; int COLS = 0; // Recent char from sourcefile int c; do { // I'm doing this do/while statement so that 'count' is automatic int count = 0; while ( ( c = fgetc( _Fsource ) ) != EOF ) { if( c == '\n' ) { ROWS++; if( COLS < count ) { COLS = count; } count = 0; } else { count++; } } } while ( c != EOF ); // Reset position of _Fsource to start of // sourcefile fseek( _Fsource, 0L, SEEK_SET ); // create a storage mechanism for // the partial sum of the numbers // in sourcefile int numbers[ROWS][COLS]; int temp[COLS]; // set every element in temp to zero for ( i = 0; i < COLS; i++ ) { temp[i] = 0; } // THINGS GO PEAR-SHAPED HERE; WHY? for ( i = 0; i < ROWS; i++ ) { for ( j = 0; j < COLS && \ ( c = fgetc( _Fsource ) ) != '\n'; j++ ) { numbers[i][j] = ( c - '0' ); } } for ( i = 0; i < ROWS; i++ ) { for ( j = 0; j < COLS; j++ ) { temp[j] += numbers[i][j]; } } return 0; }

最满意答案

更新#2:发现真正的问题:输入循环的备用行没有填充数据。 偶数行的读数将在列数上完成,但不会吸收其相应的换行符。 以下奇数行将看到立即换行并终止而不存储任何数据


我清理了你的代码并添加了输出打印[请原谅无偿的样式清理]。 值得注意的是,如果线条很短或遇到过早的EOF,“梨形”环的脆弱性。 我还提供了“偶数/奇数”错误的修复程序。

#include <stdio.h> // define a sourcefile here //#define SOURCE_FILE "/home/demiurge/play/euler/sumSource.txt" #define SOURCE_FILE "sumSource.txt" int main(void) { // generic indices int icol; int irow; int nlflg; // open a stream to sourcefile here FILE *_Fsource = fopen(SOURCE_FILE, "r"); // Determine the longest number of digits in any line // _Fsource and the total number of terms in the sum. int ROWS = 0; int COLS = 0; // Recent char from sourcefile int c; // I'm doing this do/while statement so that 'count' is automatic do { int count = 0; while (1) { c = fgetc(_Fsource); if (c == EOF) break; if (c == '\n') { ROWS++; if (COLS < count) COLS = count; count = 0; } else count++; } } while (0); printf("ROWS=%d COLS=%d\n",ROWS,COLS); // Reset position of _Fsource to start of // sourcefile fseek(_Fsource, 0L, SEEK_SET); // create a storage mechanism for // the partial sum of the numbers // in sourcefile int numbers[ROWS][COLS]; int temp[COLS]; // set every element in temp to zero for (icol = 0; icol < COLS; icol++) temp[icol] = 0; // in case of some lines are "short" for (irow = 0; irow < ROWS; irow++) { for (icol = 0; icol < COLS; icol++) numbers[irow][icol] = 0; } // THINGS GO PEAR-SHAPED HERE; WHY? c = EOF; for (irow = 0; irow < ROWS; irow++) { nlflg = 0; for (icol = 0; icol < COLS; icol++) { c = fgetc(_Fsource); if (c == EOF) break; // NOTE: in original code, this would cause alternate loop to // terminate due to "off-by-one" error // that is, even loops would fail to absorb their newlines and // cause odd loops to terminate without storing anything if (c == '\n') { nlflg = 1; break; } if (irow < 5) printf("DEBUG/READ: %d,%d c=%2.2X/%d\n",irow,icol,c,c - '0'); numbers[irow][icol] = (c - '0'); } if (c == EOF) break; // NOTE: without this, every alternate row would be skipped if (! nlflg) { while (1) { c = fgetc(_Fsource); if (c == EOF) break; if (c == '\n') break; } if (c == EOF) break; } } for (irow = 0; irow < ROWS; irow++) { for (icol = 0; icol < COLS; icol++) temp[icol] += numbers[irow][icol]; } for (icol = 0; icol < COLS; icol++) printf("%d: %d\n",icol,temp[icol]); return 0; }

我运行你的原始代码[带输出语句]和我的。 这是区别:

--- /tmp/orig 2015-12-27 17:45:57.700757183 -0800 +++ /tmp/fixed 2015-12-27 17:45:14.236833644 -0800 @@ -49,153 +49,253 @@ DEBUG/READ: 0,47 c=32/2 DEBUG/READ: 0,48 c=35/5 DEBUG/READ: 0,49 c=30/0 -DEBUG/READ: 2,0 c=34/4 -DEBUG/READ: 2,1 c=36/6 +DEBUG/READ: 1,0 c=34/4 +DEBUG/READ: 1,1 c=36/6 +DEBUG/READ: 1,2 c=33/3 +DEBUG/READ: 1,3 c=37/7 +DEBUG/READ: 1,4 c=36/6 +DEBUG/READ: 1,5 c=39/9 +DEBUG/READ: 1,6 c=33/3 +DEBUG/READ: 1,7 c=37/7 +DEBUG/READ: 1,8 c=36/6 +DEBUG/READ: 1,9 c=37/7 +DEBUG/READ: 1,10 c=37/7 +DEBUG/READ: 1,11 c=34/4 +DEBUG/READ: 1,12 c=39/9 +DEBUG/READ: 1,13 c=30/0 +DEBUG/READ: 1,14 c=30/0 +DEBUG/READ: 1,15 c=30/0 +DEBUG/READ: 1,16 c=39/9 +DEBUG/READ: 1,17 c=37/7 +DEBUG/READ: 1,18 c=31/1 +DEBUG/READ: 1,19 c=32/2 +DEBUG/READ: 1,20 c=36/6 +DEBUG/READ: 1,21 c=34/4 +DEBUG/READ: 1,22 c=38/8 +DEBUG/READ: 1,23 c=31/1 +DEBUG/READ: 1,24 c=32/2 +DEBUG/READ: 1,25 c=34/4 +DEBUG/READ: 1,26 c=38/8 +DEBUG/READ: 1,27 c=39/9 +DEBUG/READ: 1,28 c=36/6 +DEBUG/READ: 1,29 c=39/9 +DEBUG/READ: 1,30 c=37/7 +DEBUG/READ: 1,31 c=30/0 +DEBUG/READ: 1,32 c=30/0 +DEBUG/READ: 1,33 c=37/7 +DEBUG/READ: 1,34 c=38/8 +DEBUG/READ: 1,35 c=30/0 +DEBUG/READ: 1,36 c=35/5 +DEBUG/READ: 1,37 c=30/0 +DEBUG/READ: 1,38 c=34/4 +DEBUG/READ: 1,39 c=31/1 +DEBUG/READ: 1,40 c=37/7 +DEBUG/READ: 1,41 c=30/0 +DEBUG/READ: 1,42 c=31/1 +DEBUG/READ: 1,43 c=38/8 +DEBUG/READ: 1,44 c=32/2 +DEBUG/READ: 1,45 c=36/6 +DEBUG/READ: 1,46 c=30/0 +DEBUG/READ: 1,47 c=35/5 +DEBUG/READ: 1,48 c=33/3 +DEBUG/READ: 1,49 c=38/8 +DEBUG/READ: 2,0 c=37/7 +DEBUG/READ: 2,1 c=34/4 DEBUG/READ: 2,2 c=33/3 -DEBUG/READ: 2,3 c=37/7 -DEBUG/READ: 2,4 c=36/6 +DEBUG/READ: 2,3 c=32/2 +DEBUG/READ: 2,4 c=34/4 DEBUG/READ: 2,5 c=39/9 -DEBUG/READ: 2,6 c=33/3 -DEBUG/READ: 2,7 c=37/7 -DEBUG/READ: 2,8 c=36/6 -DEBUG/READ: 2,9 c=37/7 -DEBUG/READ: 2,10 c=37/7 -DEBUG/READ: 2,11 c=34/4 -DEBUG/READ: 2,12 c=39/9 -DEBUG/READ: 2,13 c=30/0 -DEBUG/READ: 2,14 c=30/0 -DEBUG/READ: 2,15 c=30/0 -DEBUG/READ: 2,16 c=39/9 -DEBUG/READ: 2,17 c=37/7 -DEBUG/READ: 2,18 c=31/1 -DEBUG/READ: 2,19 c=32/2 -DEBUG/READ: 2,20 c=36/6 -DEBUG/READ: 2,21 c=34/4 -DEBUG/READ: 2,22 c=38/8 -DEBUG/READ: 2,23 c=31/1 -DEBUG/READ: 2,24 c=32/2 -DEBUG/READ: 2,25 c=34/4 -DEBUG/READ: 2,26 c=38/8 -DEBUG/READ: 2,27 c=39/9 -DEBUG/READ: 2,28 c=36/6 -DEBUG/READ: 2,29 c=39/9 -DEBUG/READ: 2,30 c=37/7 -DEBUG/READ: 2,31 c=30/0 +DEBUG/READ: 2,6 c=38/8 +DEBUG/READ: 2,7 c=36/6 +DEBUG/READ: 2,8 c=31/1 +DEBUG/READ: 2,9 c=39/9 +DEBUG/READ: 2,10 c=39/9 +DEBUG/READ: 2,11 c=35/5 +DEBUG/READ: 2,12 c=32/2 +DEBUG/READ: 2,13 c=34/4 +DEBUG/READ: 2,14 c=37/7 +DEBUG/READ: 2,15 c=34/4 +DEBUG/READ: 2,16 c=31/1 +DEBUG/READ: 2,17 c=30/0 +DEBUG/READ: 2,18 c=35/5 +DEBUG/READ: 2,19 c=39/9 +DEBUG/READ: 2,20 c=34/4 +DEBUG/READ: 2,21 c=37/7 +DEBUG/READ: 2,22 c=34/4 +DEBUG/READ: 2,23 c=32/2 +DEBUG/READ: 2,24 c=33/3 +DEBUG/READ: 2,25 c=33/3 +DEBUG/READ: 2,26 c=33/3 +DEBUG/READ: 2,27 c=30/0 +DEBUG/READ: 2,28 c=39/9 +DEBUG/READ: 2,29 c=35/5 +DEBUG/READ: 2,30 c=31/1 +DEBUG/READ: 2,31 c=33/3 DEBUG/READ: 2,32 c=30/0 -DEBUG/READ: 2,33 c=37/7 +DEBUG/READ: 2,33 c=35/5 DEBUG/READ: 2,34 c=38/8 -DEBUG/READ: 2,35 c=30/0 -DEBUG/READ: 2,36 c=35/5 -DEBUG/READ: 2,37 c=30/0 -DEBUG/READ: 2,38 c=34/4 -DEBUG/READ: 2,39 c=31/1 -DEBUG/READ: 2,40 c=37/7 -DEBUG/READ: 2,41 c=30/0 +DEBUG/READ: 2,35 c=31/1 +DEBUG/READ: 2,36 c=32/2 +DEBUG/READ: 2,37 c=33/3 +DEBUG/READ: 2,38 c=37/7 +DEBUG/READ: 2,39 c=32/2 +DEBUG/READ: 2,40 c=36/6 +DEBUG/READ: 2,41 c=36/6 DEBUG/READ: 2,42 c=31/1 -DEBUG/READ: 2,43 c=38/8 -DEBUG/READ: 2,44 c=32/2 -DEBUG/READ: 2,45 c=36/6 -DEBUG/READ: 2,46 c=30/0 -DEBUG/READ: 2,47 c=35/5 -DEBUG/READ: 2,48 c=33/3 -DEBUG/READ: 2,49 c=38/8 -DEBUG/READ: 4,0 c=37/7 -DEBUG/READ: 4,1 c=34/4 -DEBUG/READ: 4,2 c=33/3 -DEBUG/READ: 4,3 c=32/2 -DEBUG/READ: 4,4 c=34/4 -DEBUG/READ: 4,5 c=39/9 +DEBUG/READ: 2,43 c=37/7 +DEBUG/READ: 2,44 c=33/3 +DEBUG/READ: 2,45 c=30/0 +DEBUG/READ: 2,46 c=39/9 +DEBUG/READ: 2,47 c=36/6 +DEBUG/READ: 2,48 c=32/2 +DEBUG/READ: 2,49 c=39/9 +DEBUG/READ: 3,0 c=39/9 +DEBUG/READ: 3,1 c=31/1 +DEBUG/READ: 3,2 c=39/9 +DEBUG/READ: 3,3 c=34/4 +DEBUG/READ: 3,4 c=32/2 +DEBUG/READ: 3,5 c=32/2 +DEBUG/READ: 3,6 c=31/1 +DEBUG/READ: 3,7 c=33/3 +DEBUG/READ: 3,8 c=33/3 +DEBUG/READ: 3,9 c=36/6 +DEBUG/READ: 3,10 c=33/3 +DEBUG/READ: 3,11 c=35/5 +DEBUG/READ: 3,12 c=37/7 +DEBUG/READ: 3,13 c=34/4 +DEBUG/READ: 3,14 c=31/1 +DEBUG/READ: 3,15 c=36/6 +DEBUG/READ: 3,16 c=31/1 +DEBUG/READ: 3,17 c=35/5 +DEBUG/READ: 3,18 c=37/7 +DEBUG/READ: 3,19 c=32/2 +DEBUG/READ: 3,20 c=35/5 +DEBUG/READ: 3,21 c=32/2 +DEBUG/READ: 3,22 c=32/2 +DEBUG/READ: 3,23 c=34/4 +DEBUG/READ: 3,24 c=33/3 +DEBUG/READ: 3,25 c=30/0 +DEBUG/READ: 3,26 c=35/5 +DEBUG/READ: 3,27 c=36/6 +DEBUG/READ: 3,28 c=33/3 +DEBUG/READ: 3,29 c=33/3 +DEBUG/READ: 3,30 c=30/0 +DEBUG/READ: 3,31 c=31/1 +DEBUG/READ: 3,32 c=38/8 +DEBUG/READ: 3,33 c=31/1 +DEBUG/READ: 3,34 c=31/1 +DEBUG/READ: 3,35 c=30/0 +DEBUG/READ: 3,36 c=37/7 +DEBUG/READ: 3,37 c=32/2 +DEBUG/READ: 3,38 c=34/4 +DEBUG/READ: 3,39 c=30/0 +DEBUG/READ: 3,40 c=36/6 +DEBUG/READ: 3,41 c=31/1 +DEBUG/READ: 3,42 c=35/5 +DEBUG/READ: 3,43 c=34/4 +DEBUG/READ: 3,44 c=39/9 +DEBUG/READ: 3,45 c=30/0 +DEBUG/READ: 3,46 c=38/8 +DEBUG/READ: 3,47 c=32/2 +DEBUG/READ: 3,48 c=35/5 +DEBUG/READ: 3,49 c=30/0 +DEBUG/READ: 4,0 c=32/2 +DEBUG/READ: 4,1 c=33/3 +DEBUG/READ: 4,2 c=30/0 +DEBUG/READ: 4,3 c=36/6 +DEBUG/READ: 4,4 c=37/7 +DEBUG/READ: 4,5 c=35/5 DEBUG/READ: 4,6 c=38/8 -DEBUG/READ: 4,7 c=36/6 -DEBUG/READ: 4,8 c=31/1 -DEBUG/READ: 4,9 c=39/9 -DEBUG/READ: 4,10 c=39/9 +DEBUG/READ: 4,7 c=38/8 +DEBUG/READ: 4,8 c=32/2 +DEBUG/READ: 4,9 c=30/0 +DEBUG/READ: 4,10 c=37/7 DEBUG/READ: 4,11 c=35/5 -DEBUG/READ: 4,12 c=32/2 -DEBUG/READ: 4,13 c=34/4 -DEBUG/READ: 4,14 c=37/7 +DEBUG/READ: 4,12 c=33/3 +DEBUG/READ: 4,13 c=39/9 +DEBUG/READ: 4,14 c=33/3 DEBUG/READ: 4,15 c=34/4 -DEBUG/READ: 4,16 c=31/1 -DEBUG/READ: 4,17 c=30/0 -DEBUG/READ: 4,18 c=35/5 -DEBUG/READ: 4,19 c=39/9 -DEBUG/READ: 4,20 c=34/4 +DEBUG/READ: 4,16 c=36/6 +DEBUG/READ: 4,17 c=31/1 +DEBUG/READ: 4,18 c=37/7 +DEBUG/READ: 4,19 c=31/1 +DEBUG/READ: 4,20 c=31/1 DEBUG/READ: 4,21 c=37/7 -DEBUG/READ: 4,22 c=34/4 -DEBUG/READ: 4,23 c=32/2 -DEBUG/READ: 4,24 c=33/3 -DEBUG/READ: 4,25 c=33/3 +DEBUG/READ: 4,22 c=31/1 +DEBUG/READ: 4,23 c=39/9 +DEBUG/READ: 4,24 c=38/8 +DEBUG/READ: 4,25 c=30/0 DEBUG/READ: 4,26 c=33/3 -DEBUG/READ: 4,27 c=30/0 -DEBUG/READ: 4,28 c=39/9 -DEBUG/READ: 4,29 c=35/5 -DEBUG/READ: 4,30 c=31/1 -DEBUG/READ: 4,31 c=33/3 +DEBUG/READ: 4,27 c=31/1 +DEBUG/READ: 4,28 c=30/0 +DEBUG/READ: 4,29 c=34/4 +DEBUG/READ: 4,30 c=32/2 +DEBUG/READ: 4,31 c=31/1 DEBUG/READ: 4,32 c=30/0 -DEBUG/READ: 4,33 c=35/5 -DEBUG/READ: 4,34 c=38/8 -DEBUG/READ: 4,35 c=31/1 -DEBUG/READ: 4,36 c=32/2 +DEBUG/READ: 4,33 c=34/4 +DEBUG/READ: 4,34 c=37/7 +DEBUG/READ: 4,35 c=35/5 +DEBUG/READ: 4,36 c=31/1 DEBUG/READ: 4,37 c=33/3 DEBUG/READ: 4,38 c=37/7 -DEBUG/READ: 4,39 c=32/2 -DEBUG/READ: 4,40 c=36/6 -DEBUG/READ: 4,41 c=36/6 -DEBUG/READ: 4,42 c=31/1 -DEBUG/READ: 4,43 c=37/7 -DEBUG/READ: 4,44 c=33/3 -DEBUG/READ: 4,45 c=30/0 -DEBUG/READ: 4,46 c=39/9 +DEBUG/READ: 4,39 c=37/7 +DEBUG/READ: 4,40 c=38/8 +DEBUG/READ: 4,41 c=30/0 +DEBUG/READ: 4,42 c=36/6 +DEBUG/READ: 4,43 c=33/3 +DEBUG/READ: 4,44 c=32/2 +DEBUG/READ: 4,45 c=34/4 +DEBUG/READ: 4,46 c=36/6 DEBUG/READ: 4,47 c=36/6 -DEBUG/READ: 4,48 c=32/2 -DEBUG/READ: 4,49 c=39/9 -0: 189301617 -1: 98463 -2: -536821826 -3: 65685 -4: 1149687807 -5: 33045 -6: -330672558 -7: 309 -8: 1149933361 -9: 495 -10: 715103802 -11: 33063 -12: -739952904 -13: 33225 -14: 1041326090 -15: 98512 -16: 723772574 -17: 65884 -18: -700583228 -19: 65755 -20: 1151592341 -21: 33082 -22: 635881077 -23: 98456 -24: 1670167446 -25: 65939 -26: 1352358526 -27: 32936 -28: -1507047068 -29: 131126 -30: 28632144 -31: 3670307 -32: -1457728577 -33: 5013884 -34: 1632187 -35: 202 -36: 890045461 -37: 354 -38: -1232222461 -39: 349 -40: 518640906 -41: 33102 -42: -538593328 -43: 65655 -44: 1803206122 -45: 33018 -46: 429048077 -47: 335 -48: 1669065150 -49: 65900 +DEBUG/READ: 4,48 c=37/7 +DEBUG/READ: 4,49 c=36/6 +0: 506 +1: 428 +2: 443 +3: 452 +4: 503 +5: 480 +6: 474 +7: 441 +8: 446 +9: 432 +10: 422 +11: 440 +12: 436 +13: 469 +14: 426 +15: 454 +16: 447 +17: 453 +18: 453 +19: 419 +20: 486 +21: 392 +22: 484 +23: 394 +24: 482 +25: 476 +26: 462 +27: 409 +28: 487 +29: 512 +30: 427 +31: 464 +32: 466 +33: 487 +34: 454 +35: 427 +36: 458 +37: 443 +38: 455 +39: 470 +40: 410 +41: 449 +42: 441 +43: 468 +44: 486 +45: 478 +46: 462 +47: 460 +48: 425 +49: 422

UPDATE #2: Found the real problem: Alternate rows of the input loop were not being filled with data. The reading of the even row would be fulfilled on column count but would not absorb its corresponding newline. The following odd row would see an immediate newline and terminate without storing any data


I cleaned up your code and added output print [please pardon the gratuitous style cleanup]. Of note was the fragility of the "PEAR SHAPED" loop if lines were short or encountered premature EOF. I've also provided a fix for the "even/odd" bug.

#include <stdio.h> // define a sourcefile here //#define SOURCE_FILE "/home/demiurge/play/euler/sumSource.txt" #define SOURCE_FILE "sumSource.txt" int main(void) { // generic indices int icol; int irow; int nlflg; // open a stream to sourcefile here FILE *_Fsource = fopen(SOURCE_FILE, "r"); // Determine the longest number of digits in any line // _Fsource and the total number of terms in the sum. int ROWS = 0; int COLS = 0; // Recent char from sourcefile int c; // I'm doing this do/while statement so that 'count' is automatic do { int count = 0; while (1) { c = fgetc(_Fsource); if (c == EOF) break; if (c == '\n') { ROWS++; if (COLS < count) COLS = count; count = 0; } else count++; } } while (0); printf("ROWS=%d COLS=%d\n",ROWS,COLS); // Reset position of _Fsource to start of // sourcefile fseek(_Fsource, 0L, SEEK_SET); // create a storage mechanism for // the partial sum of the numbers // in sourcefile int numbers[ROWS][COLS]; int temp[COLS]; // set every element in temp to zero for (icol = 0; icol < COLS; icol++) temp[icol] = 0; // in case of some lines are "short" for (irow = 0; irow < ROWS; irow++) { for (icol = 0; icol < COLS; icol++) numbers[irow][icol] = 0; } // THINGS GO PEAR-SHAPED HERE; WHY? c = EOF; for (irow = 0; irow < ROWS; irow++) { nlflg = 0; for (icol = 0; icol < COLS; icol++) { c = fgetc(_Fsource); if (c == EOF) break; // NOTE: in original code, this would cause alternate loop to // terminate due to "off-by-one" error // that is, even loops would fail to absorb their newlines and // cause odd loops to terminate without storing anything if (c == '\n') { nlflg = 1; break; } if (irow < 5) printf("DEBUG/READ: %d,%d c=%2.2X/%d\n",irow,icol,c,c - '0'); numbers[irow][icol] = (c - '0'); } if (c == EOF) break; // NOTE: without this, every alternate row would be skipped if (! nlflg) { while (1) { c = fgetc(_Fsource); if (c == EOF) break; if (c == '\n') break; } if (c == EOF) break; } } for (irow = 0; irow < ROWS; irow++) { for (icol = 0; icol < COLS; icol++) temp[icol] += numbers[irow][icol]; } for (icol = 0; icol < COLS; icol++) printf("%d: %d\n",icol,temp[icol]); return 0; }

I ran your original code [with output statements] and mine. Here's the difference:

--- /tmp/orig 2015-12-27 17:45:57.700757183 -0800 +++ /tmp/fixed 2015-12-27 17:45:14.236833644 -0800 @@ -49,153 +49,253 @@ DEBUG/READ: 0,47 c=32/2 DEBUG/READ: 0,48 c=35/5 DEBUG/READ: 0,49 c=30/0 -DEBUG/READ: 2,0 c=34/4 -DEBUG/READ: 2,1 c=36/6 +DEBUG/READ: 1,0 c=34/4 +DEBUG/READ: 1,1 c=36/6 +DEBUG/READ: 1,2 c=33/3 +DEBUG/READ: 1,3 c=37/7 +DEBUG/READ: 1,4 c=36/6 +DEBUG/READ: 1,5 c=39/9 +DEBUG/READ: 1,6 c=33/3 +DEBUG/READ: 1,7 c=37/7 +DEBUG/READ: 1,8 c=36/6 +DEBUG/READ: 1,9 c=37/7 +DEBUG/READ: 1,10 c=37/7 +DEBUG/READ: 1,11 c=34/4 +DEBUG/READ: 1,12 c=39/9 +DEBUG/READ: 1,13 c=30/0 +DEBUG/READ: 1,14 c=30/0 +DEBUG/READ: 1,15 c=30/0 +DEBUG/READ: 1,16 c=39/9 +DEBUG/READ: 1,17 c=37/7 +DEBUG/READ: 1,18 c=31/1 +DEBUG/READ: 1,19 c=32/2 +DEBUG/READ: 1,20 c=36/6 +DEBUG/READ: 1,21 c=34/4 +DEBUG/READ: 1,22 c=38/8 +DEBUG/READ: 1,23 c=31/1 +DEBUG/READ: 1,24 c=32/2 +DEBUG/READ: 1,25 c=34/4 +DEBUG/READ: 1,26 c=38/8 +DEBUG/READ: 1,27 c=39/9 +DEBUG/READ: 1,28 c=36/6 +DEBUG/READ: 1,29 c=39/9 +DEBUG/READ: 1,30 c=37/7 +DEBUG/READ: 1,31 c=30/0 +DEBUG/READ: 1,32 c=30/0 +DEBUG/READ: 1,33 c=37/7 +DEBUG/READ: 1,34 c=38/8 +DEBUG/READ: 1,35 c=30/0 +DEBUG/READ: 1,36 c=35/5 +DEBUG/READ: 1,37 c=30/0 +DEBUG/READ: 1,38 c=34/4 +DEBUG/READ: 1,39 c=31/1 +DEBUG/READ: 1,40 c=37/7 +DEBUG/READ: 1,41 c=30/0 +DEBUG/READ: 1,42 c=31/1 +DEBUG/READ: 1,43 c=38/8 +DEBUG/READ: 1,44 c=32/2 +DEBUG/READ: 1,45 c=36/6 +DEBUG/READ: 1,46 c=30/0 +DEBUG/READ: 1,47 c=35/5 +DEBUG/READ: 1,48 c=33/3 +DEBUG/READ: 1,49 c=38/8 +DEBUG/READ: 2,0 c=37/7 +DEBUG/READ: 2,1 c=34/4 DEBUG/READ: 2,2 c=33/3 -DEBUG/READ: 2,3 c=37/7 -DEBUG/READ: 2,4 c=36/6 +DEBUG/READ: 2,3 c=32/2 +DEBUG/READ: 2,4 c=34/4 DEBUG/READ: 2,5 c=39/9 -DEBUG/READ: 2,6 c=33/3 -DEBUG/READ: 2,7 c=37/7 -DEBUG/READ: 2,8 c=36/6 -DEBUG/READ: 2,9 c=37/7 -DEBUG/READ: 2,10 c=37/7 -DEBUG/READ: 2,11 c=34/4 -DEBUG/READ: 2,12 c=39/9 -DEBUG/READ: 2,13 c=30/0 -DEBUG/READ: 2,14 c=30/0 -DEBUG/READ: 2,15 c=30/0 -DEBUG/READ: 2,16 c=39/9 -DEBUG/READ: 2,17 c=37/7 -DEBUG/READ: 2,18 c=31/1 -DEBUG/READ: 2,19 c=32/2 -DEBUG/READ: 2,20 c=36/6 -DEBUG/READ: 2,21 c=34/4 -DEBUG/READ: 2,22 c=38/8 -DEBUG/READ: 2,23 c=31/1 -DEBUG/READ: 2,24 c=32/2 -DEBUG/READ: 2,25 c=34/4 -DEBUG/READ: 2,26 c=38/8 -DEBUG/READ: 2,27 c=39/9 -DEBUG/READ: 2,28 c=36/6 -DEBUG/READ: 2,29 c=39/9 -DEBUG/READ: 2,30 c=37/7 -DEBUG/READ: 2,31 c=30/0 +DEBUG/READ: 2,6 c=38/8 +DEBUG/READ: 2,7 c=36/6 +DEBUG/READ: 2,8 c=31/1 +DEBUG/READ: 2,9 c=39/9 +DEBUG/READ: 2,10 c=39/9 +DEBUG/READ: 2,11 c=35/5 +DEBUG/READ: 2,12 c=32/2 +DEBUG/READ: 2,13 c=34/4 +DEBUG/READ: 2,14 c=37/7 +DEBUG/READ: 2,15 c=34/4 +DEBUG/READ: 2,16 c=31/1 +DEBUG/READ: 2,17 c=30/0 +DEBUG/READ: 2,18 c=35/5 +DEBUG/READ: 2,19 c=39/9 +DEBUG/READ: 2,20 c=34/4 +DEBUG/READ: 2,21 c=37/7 +DEBUG/READ: 2,22 c=34/4 +DEBUG/READ: 2,23 c=32/2 +DEBUG/READ: 2,24 c=33/3 +DEBUG/READ: 2,25 c=33/3 +DEBUG/READ: 2,26 c=33/3 +DEBUG/READ: 2,27 c=30/0 +DEBUG/READ: 2,28 c=39/9 +DEBUG/READ: 2,29 c=35/5 +DEBUG/READ: 2,30 c=31/1 +DEBUG/READ: 2,31 c=33/3 DEBUG/READ: 2,32 c=30/0 -DEBUG/READ: 2,33 c=37/7 +DEBUG/READ: 2,33 c=35/5 DEBUG/READ: 2,34 c=38/8 -DEBUG/READ: 2,35 c=30/0 -DEBUG/READ: 2,36 c=35/5 -DEBUG/READ: 2,37 c=30/0 -DEBUG/READ: 2,38 c=34/4 -DEBUG/READ: 2,39 c=31/1 -DEBUG/READ: 2,40 c=37/7 -DEBUG/READ: 2,41 c=30/0 +DEBUG/READ: 2,35 c=31/1 +DEBUG/READ: 2,36 c=32/2 +DEBUG/READ: 2,37 c=33/3 +DEBUG/READ: 2,38 c=37/7 +DEBUG/READ: 2,39 c=32/2 +DEBUG/READ: 2,40 c=36/6 +DEBUG/READ: 2,41 c=36/6 DEBUG/READ: 2,42 c=31/1 -DEBUG/READ: 2,43 c=38/8 -DEBUG/READ: 2,44 c=32/2 -DEBUG/READ: 2,45 c=36/6 -DEBUG/READ: 2,46 c=30/0 -DEBUG/READ: 2,47 c=35/5 -DEBUG/READ: 2,48 c=33/3 -DEBUG/READ: 2,49 c=38/8 -DEBUG/READ: 4,0 c=37/7 -DEBUG/READ: 4,1 c=34/4 -DEBUG/READ: 4,2 c=33/3 -DEBUG/READ: 4,3 c=32/2 -DEBUG/READ: 4,4 c=34/4 -DEBUG/READ: 4,5 c=39/9 +DEBUG/READ: 2,43 c=37/7 +DEBUG/READ: 2,44 c=33/3 +DEBUG/READ: 2,45 c=30/0 +DEBUG/READ: 2,46 c=39/9 +DEBUG/READ: 2,47 c=36/6 +DEBUG/READ: 2,48 c=32/2 +DEBUG/READ: 2,49 c=39/9 +DEBUG/READ: 3,0 c=39/9 +DEBUG/READ: 3,1 c=31/1 +DEBUG/READ: 3,2 c=39/9 +DEBUG/READ: 3,3 c=34/4 +DEBUG/READ: 3,4 c=32/2 +DEBUG/READ: 3,5 c=32/2 +DEBUG/READ: 3,6 c=31/1 +DEBUG/READ: 3,7 c=33/3 +DEBUG/READ: 3,8 c=33/3 +DEBUG/READ: 3,9 c=36/6 +DEBUG/READ: 3,10 c=33/3 +DEBUG/READ: 3,11 c=35/5 +DEBUG/READ: 3,12 c=37/7 +DEBUG/READ: 3,13 c=34/4 +DEBUG/READ: 3,14 c=31/1 +DEBUG/READ: 3,15 c=36/6 +DEBUG/READ: 3,16 c=31/1 +DEBUG/READ: 3,17 c=35/5 +DEBUG/READ: 3,18 c=37/7 +DEBUG/READ: 3,19 c=32/2 +DEBUG/READ: 3,20 c=35/5 +DEBUG/READ: 3,21 c=32/2 +DEBUG/READ: 3,22 c=32/2 +DEBUG/READ: 3,23 c=34/4 +DEBUG/READ: 3,24 c=33/3 +DEBUG/READ: 3,25 c=30/0 +DEBUG/READ: 3,26 c=35/5 +DEBUG/READ: 3,27 c=36/6 +DEBUG/READ: 3,28 c=33/3 +DEBUG/READ: 3,29 c=33/3 +DEBUG/READ: 3,30 c=30/0 +DEBUG/READ: 3,31 c=31/1 +DEBUG/READ: 3,32 c=38/8 +DEBUG/READ: 3,33 c=31/1 +DEBUG/READ: 3,34 c=31/1 +DEBUG/READ: 3,35 c=30/0 +DEBUG/READ: 3,36 c=37/7 +DEBUG/READ: 3,37 c=32/2 +DEBUG/READ: 3,38 c=34/4 +DEBUG/READ: 3,39 c=30/0 +DEBUG/READ: 3,40 c=36/6 +DEBUG/READ: 3,41 c=31/1 +DEBUG/READ: 3,42 c=35/5 +DEBUG/READ: 3,43 c=34/4 +DEBUG/READ: 3,44 c=39/9 +DEBUG/READ: 3,45 c=30/0 +DEBUG/READ: 3,46 c=38/8 +DEBUG/READ: 3,47 c=32/2 +DEBUG/READ: 3,48 c=35/5 +DEBUG/READ: 3,49 c=30/0 +DEBUG/READ: 4,0 c=32/2 +DEBUG/READ: 4,1 c=33/3 +DEBUG/READ: 4,2 c=30/0 +DEBUG/READ: 4,3 c=36/6 +DEBUG/READ: 4,4 c=37/7 +DEBUG/READ: 4,5 c=35/5 DEBUG/READ: 4,6 c=38/8 -DEBUG/READ: 4,7 c=36/6 -DEBUG/READ: 4,8 c=31/1 -DEBUG/READ: 4,9 c=39/9 -DEBUG/READ: 4,10 c=39/9 +DEBUG/READ: 4,7 c=38/8 +DEBUG/READ: 4,8 c=32/2 +DEBUG/READ: 4,9 c=30/0 +DEBUG/READ: 4,10 c=37/7 DEBUG/READ: 4,11 c=35/5 -DEBUG/READ: 4,12 c=32/2 -DEBUG/READ: 4,13 c=34/4 -DEBUG/READ: 4,14 c=37/7 +DEBUG/READ: 4,12 c=33/3 +DEBUG/READ: 4,13 c=39/9 +DEBUG/READ: 4,14 c=33/3 DEBUG/READ: 4,15 c=34/4 -DEBUG/READ: 4,16 c=31/1 -DEBUG/READ: 4,17 c=30/0 -DEBUG/READ: 4,18 c=35/5 -DEBUG/READ: 4,19 c=39/9 -DEBUG/READ: 4,20 c=34/4 +DEBUG/READ: 4,16 c=36/6 +DEBUG/READ: 4,17 c=31/1 +DEBUG/READ: 4,18 c=37/7 +DEBUG/READ: 4,19 c=31/1 +DEBUG/READ: 4,20 c=31/1 DEBUG/READ: 4,21 c=37/7 -DEBUG/READ: 4,22 c=34/4 -DEBUG/READ: 4,23 c=32/2 -DEBUG/READ: 4,24 c=33/3 -DEBUG/READ: 4,25 c=33/3 +DEBUG/READ: 4,22 c=31/1 +DEBUG/READ: 4,23 c=39/9 +DEBUG/READ: 4,24 c=38/8 +DEBUG/READ: 4,25 c=30/0 DEBUG/READ: 4,26 c=33/3 -DEBUG/READ: 4,27 c=30/0 -DEBUG/READ: 4,28 c=39/9 -DEBUG/READ: 4,29 c=35/5 -DEBUG/READ: 4,30 c=31/1 -DEBUG/READ: 4,31 c=33/3 +DEBUG/READ: 4,27 c=31/1 +DEBUG/READ: 4,28 c=30/0 +DEBUG/READ: 4,29 c=34/4 +DEBUG/READ: 4,30 c=32/2 +DEBUG/READ: 4,31 c=31/1 DEBUG/READ: 4,32 c=30/0 -DEBUG/READ: 4,33 c=35/5 -DEBUG/READ: 4,34 c=38/8 -DEBUG/READ: 4,35 c=31/1 -DEBUG/READ: 4,36 c=32/2 +DEBUG/READ: 4,33 c=34/4 +DEBUG/READ: 4,34 c=37/7 +DEBUG/READ: 4,35 c=35/5 +DEBUG/READ: 4,36 c=31/1 DEBUG/READ: 4,37 c=33/3 DEBUG/READ: 4,38 c=37/7 -DEBUG/READ: 4,39 c=32/2 -DEBUG/READ: 4,40 c=36/6 -DEBUG/READ: 4,41 c=36/6 -DEBUG/READ: 4,42 c=31/1 -DEBUG/READ: 4,43 c=37/7 -DEBUG/READ: 4,44 c=33/3 -DEBUG/READ: 4,45 c=30/0 -DEBUG/READ: 4,46 c=39/9 +DEBUG/READ: 4,39 c=37/7 +DEBUG/READ: 4,40 c=38/8 +DEBUG/READ: 4,41 c=30/0 +DEBUG/READ: 4,42 c=36/6 +DEBUG/READ: 4,43 c=33/3 +DEBUG/READ: 4,44 c=32/2 +DEBUG/READ: 4,45 c=34/4 +DEBUG/READ: 4,46 c=36/6 DEBUG/READ: 4,47 c=36/6 -DEBUG/READ: 4,48 c=32/2 -DEBUG/READ: 4,49 c=39/9 -0: 189301617 -1: 98463 -2: -536821826 -3: 65685 -4: 1149687807 -5: 33045 -6: -330672558 -7: 309 -8: 1149933361 -9: 495 -10: 715103802 -11: 33063 -12: -739952904 -13: 33225 -14: 1041326090 -15: 98512 -16: 723772574 -17: 65884 -18: -700583228 -19: 65755 -20: 1151592341 -21: 33082 -22: 635881077 -23: 98456 -24: 1670167446 -25: 65939 -26: 1352358526 -27: 32936 -28: -1507047068 -29: 131126 -30: 28632144 -31: 3670307 -32: -1457728577 -33: 5013884 -34: 1632187 -35: 202 -36: 890045461 -37: 354 -38: -1232222461 -39: 349 -40: 518640906 -41: 33102 -42: -538593328 -43: 65655 -44: 1803206122 -45: 33018 -46: 429048077 -47: 335 -48: 1669065150 -49: 65900 +DEBUG/READ: 4,48 c=37/7 +DEBUG/READ: 4,49 c=36/6 +0: 506 +1: 428 +2: 443 +3: 452 +4: 503 +5: 480 +6: 474 +7: 441 +8: 446 +9: 432 +10: 422 +11: 440 +12: 436 +13: 469 +14: 426 +15: 454 +16: 447 +17: 453 +18: 453 +19: 419 +20: 486 +21: 392 +22: 484 +23: 394 +24: 482 +25: 476 +26: 462 +27: 409 +28: 487 +29: 512 +30: 427 +31: 464 +32: 466 +33: 487 +34: 454 +35: 427 +36: 458 +37: 443 +38: 455 +39: 470 +40: 410 +41: 449 +42: 441 +43: 468 +44: 486 +45: 478 +46: 462 +47: 460 +48: 425 +49: 422

更多推荐

本文发布于:2023-08-03 23:42:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1405207.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:执行文件   意外   Unexpected   file   performing

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!