Форум программистов, компьютерный форум CyberForum.ru

Вывести несколько строк в файл - C++

Восстановить пароль Регистрация
 
Johnlion
 Аватар для Johnlion
62 / 2 / 0
Регистрация: 11.05.2011
Сообщений: 666
09.02.2012, 19:35     Вывести несколько строк в файл #1
Условие Вывести несколько строк в файл
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstring>
 
const int N=100;
 
std :: ifstream input;
std :: ofstream output;
char name_input[130]="";            /* имя входного файла */
char name_output[130]="";           /* имя выходного файла */                           
void open_file(void);           /* прототип функции открытия файла */
 
/* ----------------------- входная структура ----------------------- */
struct vhod
{
    char name[50];
    float god_40;
    float god_50;
    float god_55;
    float god_58;
};
/* -------------------- выходная структура ------------------------- */
struct vyhod
{
    char name[50];
    float prirost;
} res;
/* -------------------- главная функция ---------------------------- */
void main(int argc, char *argv[])
{
    struct vhod table[N];
    float min;
 
    if(argc == 2)               /* если задано имя только входного файла */
    {                               
        strcpy(name_input, argv[1]);
    }
    if(argc >= 3)               /* если заданы имена и входного и выходного файлов */
    {                       
        strcpy(name_input, argv[1]);
        strcpy(name_output, argv[2]);
    }
    open_file();
 
/* ----------------- считывание входных данных из файла -------------- */
    int counter=0;            /* количество записей в таблице */
    while(!input.eof())
    {
        input >> table[counter].name >> table[counter].god_40 >> table[counter].god_50 >> table[counter].god_55 >> table[counter].god_58;
        counter++;
    }
    min = (table[0].god_55-table[0].god_40)*100/table[0].god_40;
    res.prirost = table[0].god_50-table[0].god_40;
    strcpy(res.name, table[0].name);
    for (int i=1; i<counter; i++)
    {
        if ((table[i].god_55-table[i].god_40)*100/table[i].god_40 < min)
        {
            min = (table[i].god_55-table[i].god_40)*100/table[i].god_40;
            res.prirost = table[i].god_50-table[i].god_40;
            strcpy(res.name, table[i].name);
        }
    }
 
/* --------------------------- вывод в файл -------------------------- */
    output << res.name << res.prirost;
 
    input.close();
    output.close();
}
 
void open_file(void)
{
    input.open(name_input);
    while (input.fail())
    {
        std :: cout << ("Vhod: "); //Введите имя входного файла
        std :: cin >> name_input;
        input.open(name_input);
    }
    
    output.open(name_output);
    while (output.fail())
    {
        std :: cout << ("\nVyhod: "); //Введите имя выходного файла
        std :: cin >> name_output;
        output.open(name_output);
    }
}
Программа работает нормально, но она выводит только одну строку в выходной файл. А если там будет 2 минимума (одинаковых), то выводит первый попавшийся. Как нужно изменить вывод в файл, чтобы выводило все минимумы построчно?

Кидаю входной файл для вывода одной строки и входной файл, из которого должно получиться 2 строки в выходном.
Вложения
Тип файла: txt ODNAstr.txt (284 байт, 7 просмотров)
Тип файла: txt DVEstr.txt (282 байт, 9 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2012, 19:35     Вывести несколько строк в файл
Посмотрите здесь:

Вывести несколько строк, и проверить может ли этот текст быть классом C++
Вывести середину строк (между кавычками) в файл C++
как удалять несколько символов сразу из строк? C++
C++ Функция изменяющая сразу несколько строк
Вывести элементы массива в несколько строк по пять элементов в строке C++
Разделить исходную строку на несколько строк длины K C++
Директива препроцессора в несколько строк C++
C++ Несколько ошибок при обработке строк
Вывести файл на экран, чтобы в каждой строке было не больше 40 символов, и количество строк было минимальным C++
Дан текстовый файл. Вывести на экран среднюю строку (две строки, если четное количество строк) C++
C++ Несколько строк в одном string
C++ Записать в файл несколько строк, а затем записать несколько строк из этого файла в другой

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
09.02.2012, 20:49     Вывести несколько строк в файл #2
Цитата Сообщение от Johnlion Посмотреть сообщение
Программа работает нормально, но она выводит только одну строку в выходной файл. А если там будет 2 минимума (одинаковых), то выводит первый попавшийся. Как нужно изменить вывод в файл, чтобы выводило все минимумы построчно?
Создайте массив структур vyhod. Сделайте счетчик. Если текущая запись меньше минимальной, то обнуляйте счетчик и пишите в нулевой элемент arr, где arr - массив из vyhod. Если равна минимальному значению - пишите в arr[count++], где count - счетчик. Если больше - пропускаете.
В конце выводите в цикле элементы [0; count).

Добавлено через 48 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
int counter=0;            /* количество записей в таблице */
while(!input.eof())
{
    input >> table[counter].name >> table[counter].god_40 >> table[counter].god_50 >> table[counter].god_55 >> table[counter].god_58;
    counter++;
}
min = (table[0].god_55-table[0].god_40)*100/table[0].god_40;
unsigned count = 0;
arr[count].prirost = table[0].god_50-table[0].god_40;
strcpy(arr[count++].name, table[0].name);
for (int i=1; i<counter; i++)
{
    float tmp = (table[i].god_55 - table[i].god_40) * 100. / table[i].god_40;
    if (tmp < min)
    {
        min = tmp;
        count = 0;
        arr[count].prirost = table[i].god_50 - table[i].god_40;
        strcpy(arr[count++].name, table[i].name);
    }
    else if(tmp == min)
    {
        arr[count].prirost = table[i].god_50 - table[i].god_40;
        strcpy(arr[count++].name, table[i].name);
    }
}
for(int i = 0; i < count; ++i)
    output << arr[i].name << ' ' << arr[i].prirost << std::endl;
Если пишете на С++ имеет смысл глянуть в сторону классов(со скрытыми данными и открытыми методами) и std::string вместо char[].
Yandex
Объявления
09.02.2012, 20:49     Вывести несколько строк в файл
Ответ Создать тему
Опции темы

Текущее время: 05:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru