#include<iostream.h>
void main()
{
cout<<"Love";
}
问题是如何将此程序的输出更改为
“我爱你”,main()
没有做任何改变。
答案 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“爱”“我爱你”...... :)