Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- /*
- * Заданы два файла целых чисел f1 и f2.Найти в файле f2 число, самое близкое по величине к максимальному значению файла f1
- *
- */
- void skip_error(FILE *fp, const char *err_msg, const char *file_name)
- {
- int k;
- fpos_t err_pos;
- if (fgetpos(fp, &err_pos) == 0)
- fprintf(stderr, "%s %s| offset: %ld\n", err_msg, file_name, err_pos);
- while ((k = fgetc(fp)) != ' ' && k != '\n' && k != EOF);
- }
- int main(int argc, char **argv)
- {
- /* проверка входных аргуметов */
- if (argc != 3)
- {
- fprintf(stderr, "Usage: %s <f1> <f2>\n", argv[0]);
- return 1;
- }
- /* пытаемся открыть входные файлы */
- FILE *f1, *f2;
- if ((f1 = fopen(argv[1], "r")) == NULL)
- {
- perror(argv[1]);
- return 2;
- }
- if ((f2 = fopen(argv[2], "r")) == NULL)
- {
- fclose(f1);
- perror(argv[2]);
- return 3;
- }
- /* проверка входных данных в файле f1 и присвоение начального значения max */
- int max;
- if (fscanf(f1, "%d", &max) != 1)
- {
- fprintf(stderr, "%s: input data error\n", argv[1]);
- return 4;
- }
- /* ищем мах в файле f1 */
- int val;
- while (1)
- {
- int ret = fscanf(f1, "%d", &val);
- if (ret == EOF)
- break;
- if (ret != 1)
- {
- skip_error(f1, "wrong data in", argv[1]);
- continue;
- }
- if (val > max)
- max = val;
- }
- fclose(f1);
- /* проверка входных данных в файле f2 и присвоение начального значения fmax */
- int fmax;
- if (fscanf(f2, "%d", &fmax) != 1)
- {
- fprintf(stderr, "%s: input data error\n", argv[2]);
- return 5;
- }
- /* ищем самое близкое по величине к максимальному */
- while (1)
- {
- int ret = fscanf(f2, "%d", &val);
- if (ret == EOF)
- break;
- if (ret != 1)
- {
- skip_error(f2, "wrong data in", argv[2]);
- continue;
- }
- if (abs(max - val) <= abs(max - fmax))
- fmax = val;
- }
- fclose(f2);
- printf("res: %d\n", fmax);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment