Вы можете использовать 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);