|
Модераторы: bsa |
|
шарлотта |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 55 Регистрация: 1.3.2017 Репутация: нет Всего: нет |
Здравствуйте! Требуется записать в файл целые числа в диапазоне от -10 до 10 и сформировать новый файл, в который переписать эти числа, исключив повторы.
void BuildFile(FILE *f, int size) { int num; for (int i = 0; i < size; i++) { num = rand() % 11 - rand() % 11; fwrite(&num, sizeof(num), 1, f); fflush(stdin); } fclose(f); } void PrintFile(FILE *f){ rewind(f); int num; while (fread(&num, sizeof(num), 1, f)) { printf("%5d", num); } fclose(f); } void Rewrite(FILE *f, FILE *g, int size){ int num, buf; rewind(f); //fread(&num, sizeof(num), 1, f); //fwrite(&num, sizeof(num), 1, g); for (int i = 0; i < size; i++) { fread(&num, sizeof(num), 1, f); bool flag = true; for (int j = 0; j < i; j++) { fread(&buf, sizeof(buf), 1, g); ////здесь buf = -842150451 и поэтому следующую строку проскакивает if (num == buf) { flag = false; } } if (flag != false) { fwrite(&num, sizeof(num), 1, g); } } fcloseall(); } int main() { setlocale(0,"russian"); srand((unsigned)time(NULL)); puts("Введите количество чисел"); int size; scanf("%d", &size); printf("size = %d\n", size); FILE *f = fopen("bin1.txt", "w+b"); BuildFile(f, size); puts("Исходный файл"); f = fopen("bin1.txt", "rb"); PrintFile(f); printf("\n"); f = fopen("bin1.txt", "rb"); FILE *g = fopen("bin2.txt", "w+b"); Rewrite(f, g, size); printf("\n"); puts("Новый файл"); g = fopen("bin2.txt", "rb"); PrintFile(g); printf("\n"); puts("Нажмите любую клавишу для завершения"); getch(); return 0; } И даже если надо переписать все числа, пишет неверно. Не могу понять, почему. Буду очень благодарна за помощь! Присоединённый файл ( Кол-во скачиваний: 6 ) бинарные_файлы.png 855,65 Kb |
|||
|
||||
rudolfninja |
|
|||
Опытный Профиль Группа: Участник Сообщений: 341 Регистрация: 19.2.2013 Где: г. Минск Репутация: 1 Всего: 6 |
Полагаю, что тут нужно читать из файла источника. То есть, должно быть fread(&buf, sizeof(buf), 1, f) |
|||
|
||||
шарлотта |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 55 Регистрация: 1.3.2017 Репутация: нет Всего: нет |
В данной строке читаю то, что написано в новом файле, и если число из исходного файла не совпадает ни с одним из записанных, то записываю это число в новый файл (это проверяю в следующих строках)
|
|||
|
||||
rudolfninja |
|
|||
Опытный Профиль Группа: Участник Сообщений: 341 Регистрация: 19.2.2013 Где: г. Минск Репутация: 1 Всего: 6 |
Да, что то я ошибся.
Ваша ошибка в том, что вы пытаетесь прочитать из файла больше, чем в него записано. В случае с повторяющимися числами вы не писали в файл их, но счетчик i увеличивали. А из файла вы читаете i раз, даже если там нет столько чисел. Измините условие цикла, что бы читать элементы до тех пор, пока не дойдете до конца файла ( while (!feof(g)) ). Ну и с каждой итерацией внешнего цикла нужно перемещаться на начало нового файла, для этого используйте fseek(g, 0, SEEK_SET); |
|||
|
||||
шарлотта |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 55 Регистрация: 1.3.2017 Репутация: нет Всего: нет |
Спасибо большое, все получилось!
|
|||
|
||||
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |