什么代码可以使这个循环工作
What code would make this loop work?
这是在面试中问我的问题-
for( blah blah ) {
cout<<"World";
}
我的任务是更换blah blah
,使打印输出为:- Hello World !
我只被允许更改那些废话,仅此而已。没有低于或高于此级别的代码更改!
如果可以为blah blah
:放入任何内容,为什么还要担心for循环的主体
for(int i = 0 ; std::cout << "Hello world!", i < 0; ) {
std::cout<<"World";
}
他们没有说你需要实际运行循环,是吗?
#include <iostream>
#include <ios>
using namespace std;
int main() {
for (int i = (cout << "Hello World!",0); i; ) { cout << "World"; }
}
我花了一点时间试图将循环控制为一次迭代:
#include <iostream>
#include <ios>
using namespace std;
int main() {
for (cout << "Hello "; cout; cout.setstate(ios::badbit)) { cout << "World"; }
}
如果!
要在输出中,则此代码将执行以下操作:
#include <iostream>
#include <ios>
using namespace std;
int main() {
for (cout << "Hello "; cout; cout << "!", cout.setstate(ios::badbit)) {
cout << "World";
}
}
有两个问题需要解决。
- 循环标题中的输出
- 抑制迭代
在for声明的第一部分中,您几乎可以执行每一个命令。因此,在这里打印所需的输出是个好主意。
要抑制迭代,只需输入false
作为条件。页眉的最后部分可以留空。
#include <iostream>
using namespace std;
int main()
{
for ( cout<<"Hello World!"<<endl ; false ; )
{
cout<<"World"<<endl;
}
return 0;
}
blah blah
:如何
const char *p = "Hello "; *p; cout << *p, p++); if (1
显然,for循环不过是一种转移。这样看:
for(
/* Your Code Here */
) { cout << "World"; }
所以,你需要做的第一件事就是清除程序中已经存在的所有讨厌的代码:
for(
/* Your Code Begins */
;0;);
/* TODO */
if(0
/* Your Code Ends */
) { cout << "World"; }
既然,他们自然会想测试你的聪明,那么让我们接下来做一些非常聪明的事情:
for(
/* Your Code Begins */
;0;);
struct cout {
void operator<<(cout world)
{
hello <world> !"";
}
char const* out;
cout() : out(0) { }
cout(char const* out) : out(out) { }
operator bool() { return !out; }
struct typeof
{
typeof(decltype(::std::cout) const&) { }
void operator>(bool a)
{
::std::cout << (!a ? "!" : "?");
}
};
struct
{
typeof operator<(cout c)
{
return typeof(::std::cout << "Hello " << c.out);
}
} hello;
} cout;
if(cout
/* Your Code Ends */
) { cout << "World"; }
注意:由于他们喜欢cout
这个名称,所以一定要在代码中大量使用它!
此外,要注意一个常见的GCC错误(他们称之为"扩展"),这可能会导致完全符合标准的c++代码出现问题。
最后,请记住,最初的指令在结尾处没有调用任何换行符,因此不要期望任何换行符。如果希望立即看到输出,则可能需要刷新输出。
您必须跳过的一些障碍似乎没有必要,但使用嵌套类而不是命名空间级别的嵌套类的严格要求会导致适当的运算符重载出现一些问题。
就我个人而言,我想指出的是,这段代码非常容易理解:它所做的只是说hello <world>!
,所以让我们快速地重新格式化结果,得到最终的代码(这次,省略了周围的结构):
;0;);struct cout{void operator<<(cout world){
hello <world>!
"";}char const*out;cout():out(0){}cout(char const*out):out(out){}
operator bool(){return!out;}struct
typeof{typeof(decltype(::std::cout)const&){}void
operator>(bool a){::std::cout<<(!a?"!":"?");}};
struct{typeof operator<(cout c){return
typeof(::std::cout<<"Hello "<<c.out);}}hello;}cout;if(cout
当然,最后一步只是出于纯粹的美学原因,如果需要,可以省略。
附言:它实际上打印的是"你好世界",而不是":-你好世界!",我想这正是问题所说的。将其更改为符合其他格式,留给读者练习。
使用C++不识别空格的事实!
for(int i = 0; i < 0; ++i); if(true){ cout << "Hello World!"; } else { //blah blah ) {
cout<<"World";
}
没有人愿意修复明显损坏的代码,这些代码访问了一些神秘的、从未定义的cout
,这是非常明显可怕的代码,所以。。。解决方法是:
#include <iostream>
#define BLAH
struct {
template <typename T>
void operator<<(T const& t) const {
::std::cout << ":- Hello " << t << " !n";
}
bool okay;
} cout{true};
cout.okay;
cout.okay = false
int main() {
for(BLAH) {
cout<<"World";
}
}
只有为了更好的可读性,我认为你可以换成一个单独的#define
,称为BLAH
。
注意:我的gcc拒绝构建这个,但clang以最高的警告级别接受了这个。我正在像这样构建hw.cpp
:
make CXXFLAGS=-Wall -Wextra -pedantic -std=c++11 CXX=clang++ hw
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 循环仅对第一行正常工作.其他行不受 for 的影响
- 当输入在带有空格的单行中给出时,cin 如何在 while 循环中工作?
- C++中循环和 C 样式数组的范围工作
- 在循环工作时,首先将两个文件读为向量,但仅次于迭代一次
- 试图让while循环工作,当输入符号而不是字符时会中断
- 循环工作时如何做到这一点?
- 有问题使循环工作与功能相结合
- 无法让 for 循环工作
- do while循环工作不正常
- c++不要循环工作
- 循环工作/不起作用,不知道为什么C++
- C++While循环工作
- c++:循环时出现TypeError,但在循环工作之前-(已修改)LinkedListClass迭代
- 循环工作不正常
- 什么代码可以使这个循环工作
- 我应该如何让我的for循环工作?for循环是全新的
- 我如何使这个循环工作
- 可以根据分配的循环工作范围
- Windows 8 APP,用数据绑定改变XAML文本框的文本.游戏循环工作线程导致问题