コードはWindows上のコンパイラでは正常に動作しますが、Linuxでは正常に動作しません。 Linuxでは、2倍以上の行と負数の列を返します。 Win8.1 x86_64、Linux 16.04 64ビット。私はWindows(MINGW)上にGCC v5.3を持っていますが、LinuxではGCC v5.4.0を持っています。印刷用コードファイル内の行数と列数。 Windows Mingw gcc環境では動作しますが、Linuxでは動作しないのはなぜですか?
#include <stdio.h>
// count Lines of a file
size_t countLinesOfFile(char *fileName)
{
FILE *fp = fopen(fileName, "r");
char ch;
size_t lines = 0;
do {
ch = fgetc(fp);
if(ch == '\n' || ch == '\r')
lines++;
} while (ch != EOF);
//while (!feof(fp))
// if last line doesn't end with a new line character! augment No of lines
if(ch != '\n' || ch != '\r')
lines++;
fclose(fp);
return lines;
}
// assuming that the file has equal number of columns for all its lines
// (or just 1 line)
size_t countColumnsOfFile(char *fileName)
{
FILE *fp = fopen(fileName, "r");
char ch;
size_t columns = 0;
while ((ch != '\n' || ch != '\r') && ch != EOF) { // we only want to count one line so which ever comes first
ch = fgetc(fp);
columns++;
}
columns--;
//feof(fp) = found end of file, returns non zero(true) if found
fclose(fp);
return columns;
}
'char ch'は' int ch'である必要があります。失敗する可能性のある呼び出しのエラーチェックが必要です。 'fopen'。 –
Windowsで作成されたテキストファイルでLinuxが行う行は、それぞれの行が終わるたびに '\ r'と' \ n'を両方とも持ちますか? –
'char ch'と' int ch'の違いは**重要です**](http://stackoverflow.com/questions/35356322/difference-between-int-and-char-in-getchar-fgetc- and putchar-fputc) –