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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kquick
6 / 6 / 5
Регистрация: 15.05.2014
Сообщений: 102
#1

Как читать целые числа из файла в аргумент функции без временных переменных? - C++

17.05.2014, 19:35. Просмотров 415. Ответов 6
Метки нет (Все метки)

Следующая программа читает первые 2 целых числа, записанные в файле file.txt и передает их как аргументы в функцию foo:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <fstream>
 
void foo(int a,int b) {
    // делаем что-то с a и b;
}
int main() {
    std::ifstream ifs("file.txt");
    
    int temp_1,temp_2;
    ifs >> temp_1 >> temp_2;
    foo(temp_1,temp_2);
 
    ifs.close();
    return 0;
}
Как, не используя временных переменных, сразу передавать числа из файла в аргументы функции? То есть убрать строки:
C++
1
2
int temp_1,temp_2;
ifs >> temp_1 >> temp_2;
И оставить лишь одну строку(в которой сразу чтение и передача в аргумент). Нужна конструкция что-то на подобии такой(приведенная ниже, естественно, нерабочая):
C++
1
foo(ifs >>,ifs >>);
Изменять функцию и её прототип нельзя. То есть решение, с изменением прототипа функции и передачей ifs в функцию с прототипом:
C++
1
void foo2(std::ifstream &arg);
и последующим извлечением переменных не годится. Числа в файле принимают значения из диапазона int, или меньше.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2014, 19:35     Как читать целые числа из файла в аргумент функции без временных переменных?
Посмотрите здесь:

как читать из файла строки и числа - C++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;iostream.h&gt; int main() { clrscr(); FILE *file; int k; ...

Указатель на имя файла как аргумент функции. Как реализовать? - C++
Доброго времени суток всем! Прошу помощи! Написал программу, есть пару моментов, сложных для меня. Необходимо написать две функции, одну...

Аргумент разных типов для одной функции (без перегрузки) - C++
День всем добрый! Я тут решил немного облегчить себе жизнь. У меня есть функция: void CombineWCHAR(WCHAR wchar_main, WCHAR...

Вывести все целые числа, на которые оба введенных числа делятся без остатка - C++
Пользователь вводит два целых числа. Необходимо вывести все целые числа, на которые оба введенных числа делятся без остатка. вот код...

Как организовать вывод двумерного массива (целые числа) из текстового файла? - C++
Люди, объясните младшему товарищу. как организовать вывод двумерного массива(целые числа) из текстового файла. скрин прилагается. работаю...

Надо читать числа из файла в динамический массив - C++
Доброго времени суток. Проблема такая- нужно читать числа из файла в динамический массив. Заранее задавать размер никак нельзя по...

Задана строка, содержащая целые числа (максимум 15 чисел). Упорядочить целые числа в строке по убыванию. - C++
Задана строка, содержащая целые числа (максимум 15 чисел). Упорядочить целые числа в строке по убыванию. должно выглядеть что то...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
17.05.2014, 20:00     Как читать целые числа из файла в аргумент функции без временных переменных? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
никак.
хотя если написать функцию, которая из стрима читает инт и возвращает его, то получится следующее:
C++
1
foo(readInt(ifs), readInt(ifs));
так пойдет?
zss
Модератор
Эксперт С++
6283 / 5886 / 1906
Регистрация: 18.12.2011
Сообщений: 15,104
Завершенные тесты: 1
17.05.2014, 20:08     Как читать целые числа из файла в аргумент функции без временных переменных? #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
int input(ifstream &ifs)
{
    int t;
    ifs>>t;
    return t;
}
 
...
foo(input(ifs),input(ifs));
kquick
6 / 6 / 5
Регистрация: 15.05.2014
Сообщений: 102
17.05.2014, 20:12  [ТС]     Как читать целые числа из файла в аргумент функции без временных переменных? #4
Интересное решение, но все таки хочется способ, который сократит объем строк кода, а не увеличит его. Из-за введения дополнительной функции придется вспоминать что она делает, и встраивать её в каждую аналогичную программу не комильфо.
zss
Модератор
Эксперт С++
6283 / 5886 / 1906
Регистрация: 18.12.2011
Сообщений: 15,104
Завершенные тесты: 1
17.05.2014, 20:17     Как читать целые числа из файла в аргумент функции без временных переменных? #5
Еще можно перегрузить >> но с учетом того, что он бинарный,
надо использовать какой-нибудь фиктивный тип:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class T
{
};
int operator>>(istream &ifs,T)
{
    int t;
    ifs>>t;
    return t;
}
int foo(int a,int b)
{
    return a+b;
}
int main( void )
{
    T bb;
    int r=foo(cin>>bb,cin>>bb);
    system("pause");
    return 0;
}
kquick
6 / 6 / 5
Регистрация: 15.05.2014
Сообщений: 102
17.05.2014, 20:18  [ТС]     Как читать целые числа из файла в аргумент функции без временных переменных? #6
Цитата Сообщение от DU Посмотреть сообщение
написать функцию, которая из стрима читает инт и возвращает его
Цитата Сообщение от zss Посмотреть сообщение
Еще можно перегрузить >> но с учетом того, что он бинарный,
На основании Вашей идеи придумал такой подход для стандарта c++11:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <fstream>
 
void foo(int a,int b) {
    // делаем что-то с a и b;
}
int main() {
    std::ifstream ifs("file.txt");
    
    foo( [](std::ifstream &pfs) { int t; pfs>>t; return t; }(ifs), [](std::ifstream &pfs) { int t; pfs>>t; return t; }(ifs) );
 
    ifs.close();
    return 0;
}
Нужно что-то подобное для стандарта C++98.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2014, 20:24     Как читать целые числа из файла в аргумент функции без временных переменных?
Еще ссылки по теме:

Как извлечь корень из числа без функции с++ ? - C++
Может с циклами как нибудь

Вывод из файла целые числа - C++
В текстовом файле записана последовательность целых чисел через пробел (например 40 56 84)! Когда выполняется программа в консоль...

Создание области определния для очистки временных локальных переменных - C++
Предположим, имеется некоторые доп. переменные, используемые только для нескольких действий в функции, а остаток функции (много больше, чем...

Компоненты бинарного файла – целые числа - C++
Помогите создать программу: Компоненты бинарного файла – целые числа. Заменить компоненты равные нулю числом, соответствующим количеству...

Auto как аргумент функции - C++
Возможно ли объявить параметр функции как auto? void func(auto pt); //...


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

Или воспользуйтесь поиском по форуму:
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
17.05.2014, 20:24     Как читать целые числа из файла в аргумент функции без временных переменных? #7
если ваша цель - миниум кода - то вариант с временнимы переменными - самый лаконичный и простой.
если таких чтений в коде много - то тогда можно задуматься о написании хелперных фунций вроде тех,
которые тут уже озвучили. если нет - то это изврат.
Yandex
Объявления
17.05.2014, 20:24     Как читать целые числа из файла в аргумент функции без временных переменных?
Ответ Создать тему
Опции темы

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