Файлы в С\С++

Здравствуйте ! Помогите пожалуйста с программой с Си,которая в текстовом файле находит количество чисел всего и в каждой строке

те «арк43» не является числом , а «467» , «+33» , «25.» , «34(» являются числами

Нужно обязательно на C, или C++ тоже пойдет?

Можно на С++ , если только пользоваться функциями, работающими в си ..Те,фактически на Си......А вообще хочется на си

если только пользоваться функциями, работающими в си

Тогда это и будет C :-)

Держи. Тут просто считаются все вхождения целых чисел в файле. Никакие спецсимволы, вроде скобок, плюсов и букв не учитываются про определении «правильности» числа.

#include <stdio.h>
#include <stdlib.h>

#define __FILENAME__ "numbers.txt"

int main(int argc, char *argv[])
{
    FILE *fp = fopen(__FILENAME__, "r");
    char c;
    int digit;

    // Количество строк в файле
    int line_count = 0;

    int number_found = 0;

    // Количество чисел в файле
    unsigned int num_count = 0;

    // Количество чисел в строках
    unsigned int line_num_count = 0;

    if (fp == NULL) {
        // Невозможно открыть файл
        fprintf(stderr, "%s: cannot open file %s", argv[0], __FILENAME__);
        exit(1);
    }

    while ((c = fgetc(fp)) != EOF) {
        digit = c - '0';

        if (digit < 0 || digit > 9) {
            if (number_found) {
                ++line_num_count;
            }
            number_found = 0;
        }

        if (c == '\n') {
            ++line_count;
            num_count += line_num_count;
            printf("Numbers at %d line: %d\n", line_count, line_num_count);
            line_num_count = 0;
        }

        if (digit >= 0 && digit <= 9) {
            number_found = 1;
        }
    }

    printf("Numbers total: %d\n", num_count);

    fclose(fp);

    return 0;
}

Содержимое файла «numbers.txt»:

арк43
467 +33
25 dsf sdf 455 dd 99
34

При компилляции программы , у меня не рассматривается последняя строка текстового файла
И вся соль задания в том,чтобы программа умела отличать числа от цифр перемешанных с буквами

Хотя сейчас что-то сделал,и строчки начал считать без ошибок

В конце файла нужно сделать пустую строку, чтобы программа работала корректно.

И вся соль задания в том,чтобы программа умела отличать числа от цифр перемешанных с буквами

Поиграйтесь с парсингом внутри цикла. Где-то здесь:

if (digit < 0 || digit > 9) {
    if (number_found) {
        ++line_num_count;
    }
    number_found = 0;
}

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.