2015-01-20 2 views
-1

Так что я довольно новичок в C (я использую язык C), и я хочу напечатать список чисел от 1 до 90 включительно. НО я хочу только распечатать список номеров, которые не находятся в указанном файле с именем reserved.txt (который должен хранить только список номеров int). При первом запуске программы (когда зарезервировано значение NULL, пользователю предлагается ввести число от 1 до 90 включительно. Затем это число сохраняется в файле reserved.txt. Когда зарезервировано содержит номер AT LEAST 1, однако я хочу распечатать все номера от 1 до 90 включительно на экране, за исключением любых чисел, хранящихся в файле reserved.txt. Поэтому я в основном хочу перескакивать или игнорировать значения в файле reserved.txt при печати значений на экране. должны быть очень подробными NB файл расположены в порядке возрастания каждый раз после первого запуска, если это помогаетПрочитать файлы и напечатать номера не в файле

+4

Что вы пробовали до сих пор и где вы застряли? Если вы вообще не начали: попробуйте решить части проблемы: печатайте цифры от 1 до 90, читая целые числа из файла, ... Если все отдельные части работают изолированно, объедините их с окончательным решением. – 5gon12eder

+0

Один из способов, которым вы могли бы это сделать, - сначала прочитать в файле reserved.txt массив целых чисел. Затем создайте внешний цикл, который будет проходить от 1 до 90, и каждый проход проверяет массив на это значение. Если число в зарезервированном массиве больше> чем текущий проход, вы можете распечатать весь путь до него без проверки массива. –

+0

Попробуйте в командной оболочке: 'seq 1 90 | grep -v -f reserved.txt'. –

ответ

0

Попробуйте массив вроде этого:...

unsigned int reserved_integers[max_value]; 

Затем использовать функцию FIL л это в.

void fill_table() { 
    FILE *input = fopen("reserved.txt", "r"); 
    if (input == NULL) { 
    return; 
    } 
    unsigned int i = 0; 
    unsigned int x = 0; 
    char word[5]; 
    for (; i < max_value; i++) { 
    if(fgets(word, 5, input) == NULL) break; 
    x = atoi(word); 
    reserved_integers[x] = i; 
    } 
} 

Наконец, в цикле печати значение индексов массива, которые равны нулю (я дам вам понять это самостоятельно).

+0

fgets возвращает строку, поэтому eof возвращает пустую строку. –

+0

'fgets()' does _not_ ничего не делает для 'x' в конце файла. «Если встречается конец файла, и никакие символы не считываются в массив, содержимое массива остается неизменным ...» C11 §7.21.7.2 – chux

+0

@chux Извините, это была ошибка с моей стороны. –

Смежные вопросы