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