fgets を使用してファイルを読み込んでいます。ファイルの各行を正規表現と照合する必要があります。英数字以外の文字がある場合は、プログラムを終了して、行番号と「不正な」文字を表示する必要があります。何が起こっているかというと、「悪い」キャラクターの前に追い出しているということです。これが私の.datファイルです:
howard jim dave
joe
(
Maggie
プログラムの私の出力は次のとおりです。
file opened
Digit: howard jim dave
is not alphanumeric on line: 1
Exiting program!
File closed
起こるべきことは、3 行目でキックアウトすることです。これは起こっていません。
main.h ファイルにある私の正規表現は次のとおりです。
#ifndef MAIN_H
#define MAIN_H
#ifdef __cplusplus
extern "C" {
#endif
#define BUFF 1024
#define to_find "^[a-zA-Z0-9]+$"
ここに私のfileCheck.cがあります
#include "main.h"
int fileCheck(FILE *fp)
{
int ret_val;
int line_count = 0;
char file[BUFF];
regex_t regex;
if (regcomp(®ex, to_find, REG_EXTENDED) != 0)
{
fprintf(stderr, "Failed to compile regex '%s'\n", to_find);
return EXIT_FAILURE;
}
if (fp != NULL)
{
while (fgets(file, BUFF, fp))
{
line_count++;
if ((ret_val = regexec(®ex, file, 0, NULL, 0)) != 0)
{
printf("Digit: %s is not alphanumeric on line: %d\n", file, line_count);
printf("Exiting program!\n");
return EXIT_FAILURE;
}
}
}
}
「\n」文字が問題なのかどうかはわかりません。そうではないと思います。isalnum() かどうかはよく知っていますが、正規表現を使用しています。この問題の可能な解決策は何ですか? ご提案いただきありがとうございます。
編集: fgets の代わりに fscanf を使用した場合、上記の正規表現は問題なく機能したことに言及したいと思います。変更の理由は、各行を数える必要があるためです。私が正しければ、fscanf は改行文字を無視します。改行を数える方法が必要です。fscanf を使用して新しいものをカウントすることは可能ですか? 私の元のファイル読み取りループは次のとおりです。
while (fscanf(fp, "%11023s", file) != EOF
{
line_count++;
if (regexec(®ex, file, 0, NULL, 0) != 0)
{
printf("%s%d wrong:\n, file, line_count);
return EXIT_FAILURE;
}
}