文字\r
と\n
は単一の文字であるため、入力を読み取るときに、\\
文字が含まれていません。さらに、Windowsを使用している場合は、ファイルをモード"rb"
で開いてバイナリモードで開く必要があります。そうしないと、ランタイムによって\r
文字が削除されます。
FILE *fp = fopen(fileName, "rb");
int lastchar = 0;
int lineCount = 0;
int c;
while ((c = fgetc(fp)) != EOF) {
if (lastchar == '\r' && c == '\n')
lineCount++;
lastchar = c;
}
printf("line count: %d\n", lineCount);
本当に4文字の連続を数えたい場合は、\\
r
\\
n
そのように行うことができます(奇妙に思えますが、入力に文字シーケンスが引用されている可能性があります)。
FILE *fp = fopen(fileName, "rb");
char prevchars[4] = { 0, 0, 0, 0 };
char fingerprint[4] = { '\\', 'r', '\\', 'n' };
int lineCount = 0;
int c, i;
while ((c = fgetc(fp)) != EOF) {
if (memcmp(prevchars, fingerprint, 4) == 0)
lineCount++;
for (i = 1; i < 4; i++)
prevchars[i - 1] = prevchars[i];
prevchars[3] = (char)c;
}
printf("line count: %d\n", lineCount);