在不更改main()函数的情况下更改C ++输出

时间:2009-03-14 16:16:05

标签: c++

#include<iostream.h>
void main()
{
    cout<<"Love";
}

问题是如何将此程序的输出更改为 “我爱你”,main()没有做任何改变。

14 个答案:

答案 0 :(得分:91)

好的,修复你的main函数和iostream.h ......这就是

#include <iostream>

// to make sure std::cout is constructed when we use it
// before main was called - thxx to @chappar
std::ios_base::Init stream_initializer;

struct caller {
    caller() { std::cout << "I "; }
    ~caller() { std::cout << " You"; }
} c;

// ohh well, for the br0ken main function
using std::cout;

int main()
{
    cout<<"Love";
}

我想我应该解释为什么会有效。该代码定义了一个具有构造函数和析构函数的结构。在创建struct的对象时运行构造函数,并在销毁该对象时运行析构函数。现在,在结构定义的末尾,您可以放置​​类型为caller的声明符。

因此,我们上面所做的是创建一个名为c的对象,它在程序启动时构造(并且构造函数被调用) - 甚至在main运行之前。当程序终止时,对象将被销毁并运行析构函数。在其间,main印有“爱”。

这个模式实际上是术语RAII非常熟悉的,它通常在构造函数中声明一些资源,并在析构函数调用中再次释放它。

答案 1 :(得分:39)

#include <iostream>
class tclass
{
  public:
    void operator <<(char *s)
    {
          std::cout<<"I"<<s<<"You"<<std::endl;
    }
};

tclass cout;

int main()
{
  cout<<"love";
}

答案 2 :(得分:13)

不像litb那样优雅,但它有效

#include <iostream> 
#include <cstdio> 
#include <sstream> 

#define cout     printf("I love you\n"); std::ostringstream os; os 

int main() 
{ 
    cout << "love"; 
}

当然,您不需要使用stringstream,您可以使用operator<<的任何课程。

答案 3 :(得分:9)

不像litb那样优雅,但另类:

#include <iostream>
using namespace std;

int foo()
{
    cout << "I Love You" << endl;
    return cout.rdbuf(0);
}
int i = foo();

int main()
{
    cout << "Love" << endl;
}

答案 4 :(得分:8)

像这样:

#include <iostream>
int main() {
   std::cout << "I Love You" << std::endl;
   return 0;
}

/*
#include<iostream.h>
void main()
{
    cout<<"Love";
}
*/

这样,您就没有更改 main中的任何内容。 :-P

答案 5 :(得分:5)

我们也可以这样做:

#include <iostream>
#include <cstdlib>
using namespace std;

int fnfoo(int inum){
   cout << "I Love You" << endl;
   return (exit(0),inum);
}

int dummy = fnfoo(5);

int main()
{
   cout << "Love" << endl;
}

简单而且效果很好;)

答案 6 :(得分:2)

该代码没有使用std,但无论如何它需要在cout周围编写自己的包装并删除使用std(如果有)并使用mystd替换定义了包装器。

答案 7 :(得分:1)

我猜你可以写一个运算符&lt;&lt;在当前输出之前添加了“I”和“You”。

答案 8 :(得分:0)

你的main函数不应该返回一个int吗?您要么需要更改方法,要么编写另一个程序,但这是更改简单字符串的最全面的方法......

答案 9 :(得分:0)

经验教训是,C ++可以通过静态构造函数/析构函数在main()之前和之后执行代码,例如。由litb发布的代码。

答案 10 :(得分:0)

假设这是一个课程作业,我敢打赌,你可以重写iostream.h,因为C ++并不认为它是特殊的(对于某些“特殊”的定义)。

答案 11 :(得分:-1)

您需要通过调用其他函数或更改文本来更改main。由于main()是您程序的主要输出

答案 12 :(得分:-1)

你能更准确一点吗?

你希望那段代码的输出是“我爱你”而不是“爱”吗?

编辑:我认为你不能不改变main()中至少一行代码。您可以从cout&lt;&lt;“Love”更改为cout&lt;&lt;“我爱你”或只添加一个输出该特定行的函数。

答案 13 :(得分:-1)

我真的很惊讶没有人建议#define“爱”“我爱你”...... :)