Я хочу читать из файла в c построчно и проверять каждую строку, если это целое число - PullRequest
0 голосов
/ 22 мая 2018

как я могу читать из файла построчно и проверять каждую строку, если это целое число?

FILE *fp;
fp = fopen("users.txt", "r");


while(fscanf(fp, "%d", &IDRead)!=EOF)
{
  enter code here
}

fclose(fp);

1 Ответ

0 голосов
/ 22 мая 2018

Вы можете использовать fgets() для чтения строки и isdigit(), чтобы проверить, является ли каждый символ в строке числом.

Сначала мы можемсоздайте функцию isnumber(), которая проверяет, является ли каждый символ в строке числом.Для обработки отрицательных чисел мы можем проверить, что первый символ является либо цифрой, либо '-'.

bool isnumber(char* str) {
    int len = strlen(str);
    if (len <= 0) {
        return false;
    }

    // Check if first char is negative sign or digit
    if (str[0] != '-' && !isidigit(str[0])) {
        return false;
    }

    // Check that all remaining chars are digits
    for (int i = 1; i < len; i++) {
        if (!isdigit(str[i])) {
            return false;
        }
    }

    return true;
}

Наша функция isnumber() предполагает, что строка не имеет начального или конечного пробела, а строка получена изfgets() может иметь оба.Нам понадобится функция, которая удаляет пробелы с обоих концов строки.Вы можете прочитать о том, как это сделать, в этом ответе .

Теперь мы можем использовать нашу функцию isnumber() внутри цикла while, чтобы проверять каждую строку в файле с помощью fgets().

FILE *fp = fopen("users.txt", "r");
if(!fp) {
    perror("Failed to open file");
    return -1;
}

const int MAX = 256;
char line[MAX];
while (fgets(line, MAX, fp) != NULL) {
    stripLeadingAndTrailingSpaces(line);
    printf("%s\t", line);

    if (isnumber(line)) {
        printf("is a number\n");
    }
    else {
        printf("is not a number\n");
    }
}

fclose(fp);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...