有什么方法可以从用户那里获取输入并将其直接传递给没有输入参数的函数?
我有一个使用名为" Fraction"它包含2个属性,分子和分母(两个整数)。我希望能够做到这样的事情:
fraction a;
cout << "Enter a fraction "; //User inputs something like "1/2"
read(a); // "1/2" is read into the fraction struct a, num = 1 and den = 2
cout << "You entered ";
print(a);
cout << endl;
我可以这样做,还是需要将分子和分母存储在单独的变量中并将它们传递给read
函数?
由于
答案 0 :(得分:3)
我建议您在operator >>
课程中重载Fraction
。
class Fraction
{
int numerator;
int denominator;
friend std::istream& operator>>(std::istream& input, Fraction& f);
};
std::istream& operator>>(std::istream& input, Fraction& f)
{
// Read numerator
input >> f.numerator;
char slash;
input >> slash;
// Read the denominator
input >> f.denominator;
return input;
}
重载将允许您编写如下代码:
Fraction f;
std::cin >> f;
有许多替代方案,例如具有读取数据的功能:
void Read_Fraction(std::istream& input,
int& numerator,
int& denomenator)
{
char slash;
input >> numerator >> slash >> denominator;
}
答案 1 :(得分:0)
您询问是否在没有参数化功能的情况下从用户那里获取输入,但您的示例显示您使用的参数函数是您要求的,&#34;我可以这样做吗?&#34;我不确定你问的是哪种方法。
是的,您可以执行示例中显示的内容,但在这种情况下,您将使用带参数的函数。您需要实现read
以使用cin
来期望用户通过stdin
输入两个整数(否则一些任意函数会如何知道您预期用户只有两个且只有两个整数在继续之前?)。
你不能通过&#34;任何没有参数的函数。你可以做的是使用你的read
和print
函数都知道的全局变量,但最好避免使用全局变量,而是将数据作为参数传递给函数调用。
修改:请参阅Thomas的答案,了解使用cin
的替代方法。
答案 2 :(得分:0)
以下方法应该会有所帮助
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p: %c - %m%n" />
</layout>
</appender>
<logger name="com.mchange.v2.c3p0">
<level value="info"/>
</logger>