Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2015, 22:14   #1
Sterben
Форумчанин
 
Аватар для Sterben
 
Регистрация: 01.03.2015
Сообщений: 118
По умолчанию Си(не получается вывести правильное значение из файла)

Код:
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
#include <conio.h>
int main ()
{
    FILE *f1,*f2,*f3;
    char one[20],two[20],s[20],h[20];
    int voz,j,n,l,k,i;
    f1=fopen("1.txt","r");
    if(!f1) {printf("File ne nayden"); exit(1);}
    f2 = fopen("2.txt","r");
    if(!f2) {printf("File ne nayden"); exit(1);}
    f3=fopen("3.txt","w");
    if(!f3) {printf("File ne nayden"); exit(1);}
    printf("vvedite god rozhdeniya:\n");
    gets(s);
    while(!feof(f1))
        {fscanf(f1,"%s %s",&one,&two);
        l=atoi(two);
    while(!feof(f2))
    {fscanf(f2,"%s %s",&one,&two);
            n=atoi(s);
            k=atoi(two);
                if(k == n)
                        fprintf(f3,"%s %d %s\n",one,l,two);}
        }
    fclose(f1);
    fclose(f2);
    fclose(f3);
    getchar();
    return 0;
}
У меня есть 3 текстовых файла, в 1 Фамилия и возраст , Во втором Фамилия и год,пользователь вводит год(s)оно сравнивает значение в 2 файле и если есть совпадение тогда оно записывает их в 3 файл,проблема в том что у меня выводит один и тоже возраст
Sterben вне форума Ответить с цитированием
Старый 12.03.2015, 23:17   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Кросспост - http://programmersforum.ru/showthread.php?t=273901.
Вроде работает:
Код:
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
#include <conio.h>

int main()
{
    FILE *f1, *f2, *f3;
    char fam1[20], fam2[20];
    int year1, year2, year3;
    f1 = fopen("1.txt","r");
    if (!f1) {printf("File ne nayden"); exit(1);}
    f2 = fopen("2.txt","r");
    if (!f2) {printf("File ne nayden"); exit(1);}
    f3 = fopen("3.txt","w");
    if (!f3) {printf("File ne nayden"); exit(1);}
    printf("vvedite god rozhdeniya:\n");
    scanf("%d", &year1);
    while (!feof(f2)) {
        fscanf(f2, "%s %d", fam1, &year2);
        if (year1 == year2) {
            f1 = freopen("1.txt", "r", f1);
            while (!feof(f1)) {
                fscanf(f1, "%s %d", fam2, &year3);
                if (!strcmp(fam1, fam2)) {
                    fprintf(f3, "%s %d %d\n", fam1, year3, year1);
                    break;
                }
            }
        }
    }
    fclose(f1);
    fclose(f2);
    fclose(f3);
    getchar();
    return 0;
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 13.03.2015 в 00:36.
BDA на форуме Ответить с цитированием
Старый 12.03.2015, 23:50   #3
Sterben
Форумчанин
 
Аватар для Sterben
 
Регистрация: 01.03.2015
Сообщений: 118
По умолчанию

Спасибо,а можете объяснить что делает "freopen",и можно ли обойтись без сравнения
"if (!strcmp(fam1, fam2))"так как фамилии в двух файлах одинаковые?
Sterben вне форума Ответить с цитированием
Старый 13.03.2015, 00:33   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

freopen переоткрывает файл - http://www.cplusplus.com/reference/cstdio/freopen/.
Если люди в обоих файлах записаны в одном порядке, то можно написать проще:
Код:
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
#include <conio.h>

int main()
{
    FILE *f1, *f2, *f3;
    char fam[20];
    int year1, year2, year3;
    f1 = fopen("1.txt","r");
    if (!f1) {printf("File ne nayden"); exit(1);}
    f2 = fopen("2.txt","r");
    if (!f2) {printf("File ne nayden"); exit(1);}
    f3 = fopen("3.txt","w");
    if (!f3) {printf("File ne nayden"); exit(1);}
    printf("vvedite god rozhdeniya:\n");
    scanf("%d", &year1);
    while (!feof(f1) && !feof(f2)) {
        fscanf(f1, "%s %d", fam, &year2);
        fscanf(f2, "%*s %d", &year3);
        if (year1 == year3)
            fprintf(f3, "%s %d %d\n", fam, year2, year3);
    }
    fclose(f1);
    fclose(f2);
    fclose(f3);
    getchar();
    return 0;
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 13.03.2015 в 00:35.
BDA на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести значение из файла реестра oteccc Общие вопросы Delphi 6 07.12.2013 00:05
Не правильное значение даты Айвенго Microsoft Office Access 8 01.04.2013 15:04
найти и открыть файл... взять значение из файла и вывести klukva200808 Microsoft Office Excel 2 23.05.2011 02:36
Не получается правильное выполнение проги (рекурсия) Driver_09 Помощь студентам 0 23.12.2009 19:55
DBGridEh - поле с картинками. (как задать правильное значение) Jenya БД в Delphi 4 25.03.2008 06:26