Чтение и сравнение чисел из текстового файла C - PullRequest
1 голос
/ 16 октября 2011

Я новичок в программировании на C, поэтому у меня возникли проблемы с приведенной ниже проблемой.

У меня есть текстовый файл inp.txt, который содержит следующую информацию:

400;499;FIRST;
500;599;SECOND;
670;679;THIRD;

Мне нужно набрать число, и моя программа должна сравнить его с числами из файла inp.txt.

Например, если я наберу 450, это будет между 400 и 499, поэтому мне нужно записать слово FIRST в файл out.txt

Понятия не имею, как преобразовать массив символов в int.

1 Ответ

1 голос
/ 16 октября 2011

Я думаю, вам понадобятся эти общие шаги в вашей программе (но я оставлю вам возможность выяснить, как именно вы хотите это сделать)

  1. Загрузите каждый из диапазонов и текст «FIRST», «SECOND» и т. Д. Из файла inp.txt, в массив или несколько массивов или тому подобное. Как я уже сказал в комментарии выше, fscanf может быть полезным. На этой странице описывается, как его использовать - страница предназначена для C ++, но ее использование в C должно быть таким же http://www.cplusplus.com/reference/clibrary/cstdio/fscanf/. Грубо говоря, идея в том, что вы даете fscanf спецификатор формата для того, что вы хотите извлечь из строки в файле, и она помещает найденные биты в указанные вами переменные)
  2. Предложите пользователю ввести номер.
  3. Просмотрите массив (ы), чтобы определить, к какому диапазону относится число, и, следовательно, какой текст выводить

Редактировать: Я добавлю некоторые подробности, как просил аскер. Это все еще своего рода скелет, чтобы дать вам некоторые идеи. Используйте функцию fopen, что-то вроде этого (объявите указатель FILE* input_file):

input_file = fopen("c:\\test\\inp.txt", "r") /* "r" opens inp.txt for reading */

Затем хорошо проверить, что файл был успешно открыт, проверив, если input_file == NULL.

Затем используйте fscanf, чтобы прочитать подробности из одной строки файла. Перебирайте строки в файле, пока не прочитаете все. Вы даете fscanf указатели на переменные, в которые вы хотите поместить информацию из каждой строки файла. (Это немного похоже на спецификатор форматирования printf в обратном порядке).

Итак, вы можете объявить int range_start, range_end и char range_name[20]. (Чтобы упростить задачу, давайте предположим, что все слова имеют длину не более 20 символов. Хотя в долгосрочной перспективе это может быть не очень хорошим планом).

while (!feof(input_file)) { /* check for end-of-file */

   if(fscanf(input_file, "%d;%d;%s", &range_start, &range_end, range_name) != 3) {
      break; /* Something weird happened on this line, so let's give up */
   else {
      printf("I got the following numbers: %d, %d, %s\n", range_start, range_end, range_name);
   }
}

Надеюсь, это даст вам несколько идей. Я попытался запустить этот код, и он, кажется, работает. Однако стоит сказать, что у fscanf есть некоторые недостатки (см., Например, http://mrx.net/c/readfunctions.html),, поэтому другой подход заключается в использовании fgets для получения каждой строки (преимущество fgets состоит в том, что вы можете указать максимальное количество символов для чтения, так что нет опасности превышения длины строкового буфера) и затем sscanf для чтения из строки в ваши целочисленные переменные. Однако я не пробовал этот способ.

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