WedX - журнал о программировании и компьютерных науках

C Программа для поиска в файле чисел больше 100

Цель состоит в том, чтобы написать функцию int, которая возвращает количество вхождений чисел больше 100 в текстовый файл. Функция должна получить указатель на файл в качестве аргумента.

Вот мой код:

#include <stdio.h>
int function(FILE *infp);

int main ()
{
        FILE *infp;
        printf("\n%d\n",function(infp));
}

int function(FILE *infp)
{
        int num, counter=0;
        if ((infp = fopen ("text.txt", "r")) == NULL)
                printf ("\ncannot open the file text.txt\n");
        while ((num = getc())!=EOF)
        {
                if (num>100)
                    counter++;
        }
        fclose(infp);
        return (counter);
 }

Он всегда выводит 0. Я думаю, что либо getc не подходит для использования здесь, либо, может быть, я неправильно форматирую текстовый файл? Любая помощь будет отличной

25.02.2015

  • getc возвращает символ, а не число. См. руководство к нему. 25.02.2015
  • getc() возвращает char, который при сохранении как int получает значение ASCII этого char. Если вы стремитесь найти число, написанное текстом внутри файла, то это далеко не так. 25.02.2015
  • Посмотрите на fscanf, чтобы получить текстовый номер. 25.02.2015
  • Ваш параметр infp совершенно бесполезен (и передача (следовательно, чтение) его неинициализированного фактически вызывает поведение undefined). Либо удалите его, либо откройте и закройте файл в main и передайте действительный указатель FILE * на вашу функцию. Как разобрать ваш текстовый файл, во многом зависит от того, что будет в файле. Только цифры? В каком формате? можете показать пример? 25.02.2015
  • Начните с регистрации того, что возвращает getc, чтобы убедиться, что это то, что вы ожидаете. 25.02.2015

Ответы:


1

здесь вы используете getc() для получения чисел из файла, но ваш getc() будет давать вам только один символ за раз, например:


если содержимое вашего файла выглядит так: «103 9»; тогда ваш getc() даст «1» в первый раз, затем он даст вам «0», а затем «3».. таким образом, вы никогда не будете читать число полностью, и вы получаете один символ за раз. Чтобы избавиться от этого, вы можете использовать: fscanf(infp, "%d", &num);.... это даст вам один полный номер за один раз. тогда вы можете легко сопоставить числа.


25.02.2015

2

Это будет немного работы, чтобы сделать это на C. Как насчет захвата текстового содержимого. Разделение по пространству. Проверяя правильность символов ASCII, представляющих число с основанием 10 [48,57] (интервальное обозначение), оттуда вы можете применить алгоритм преобразования, например atoi

25.02.2015

3

getc() читает следующий символ из потока. Что вы хотите, так это токенизировать файл через какой-то разделитель (скажем, пробел). Подробнее см. здесь.

25.02.2015
Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]