我的循环需要能够生成字母A B C ext。像这样的垂直:
$domain= strtolower($_SERVER['SERVER_NAME']); // "s1.s2.domain.com"
$position= strrpos($domain, '.domain.com');
$subdomain= substr($domain, 0, $position);
然而当它到达字母J时,它需要重新开始。用户输入通过命令行生成的行数。我无法找到一种方法,使循环在到达字母J后重新开始。我的代码在这里:
A
B
C
答案 0 :(得分:1)
请注意,#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
int letter = 65;
for(int i = 0; i < atoi(argv[1]); i++)
{
cout <<(char)letter++;
cout << endl;
if(letter == 75)
{
int letter = 65;
}
}
return(0);
}
语句中的int letter
已替换为letter
if
输入为16:
#include <iostream>
#include <cstdlib>
using namespace std;
int main(int argc, char **argv)
{
int letter = 65;
for(int i = 0; i < atoi(argv[1]); i++)
{
cout <<(char)letter++;
cout << endl;
if(letter == 75)
{
letter = 65;
}
}
return(0);
}
答案 1 :(得分:1)
你可以这样做:
if(letter == 75)
{
letter = 65;
}
要点是:
#include <iostream>
#include <cassert>
#include <cstdlib>
int main(int argc, char **argv)
{
using namespace std;
assert(argc >= 1 + 1); //Fail with an error message rather than a segfault if the argument isn't provided
int n_iterations = atoi(argv[1]);
int range_size = 'J' - 'A' + 1; //include 'J'
for(int i=0; i < n_iterations; i++){
cout<< char('A'+i % range_size) << '\n';
}
return 0;
}
一次而不是每次迭代atoi
)优于魔术数字'A'
而不是i % range_size
if
刷新)之后不刷新对于管道中的性能会更好(如果你想要性能,你也可能希望通过endl
转而与stdio
同步})如果你真的想使用ios::sync_with_stdio(false);
,那么问题是:
if
是因为 if(letter == 75)
{
int letter = 65;
}
位于新范围内(=大括号对),它将创建一个新的本地int letter = 65;
变量,该变量将掩盖原始letter
。
letter
应该解决问题。
答案 2 :(得分:0)
这里:
A
B
C
D
E
F
G
H
I
J
A
B
C
D
E
F
您要在大括号内重新声明 if(letter == 75)
{
int letter = 65;
}
,而不是修改现有的letter
变量。此letter
变量是该块的本地变量,并隐藏您的其他letter
变量。
您可以通过在程序开头放置断点并在那里查看字母变量来自行调试。你会注意到进入letter
时没有修改它。
答案 3 :(得分:0)
试试这个:
if
答案 4 :(得分:0)
有很多方法可以完成这项任务。例如,您可以按以下方式编写程序
#include <iostream>
#include <cstdlib>
int main( int argc, char **argv )
{
const int N = 'J' - 'A' + 1;
int n = 0;
if ( argv[1] ) n = std::atoi( argv[1] );
for ( int i = 0; i < n; i++ ) std::cout << char( 'A' + i % N ) << std::endl;
}
例如,如果命令行参数设置为14,则输出将类似于
A
B
C
D
E
F
G
H
I
J
A
B
C
D
或者您可以编写主循环,如本演示程序中所示
#include <iostream>
#include <cstdlib>
int main( int argc, char **argv )
{
const char A = 'A', J = 'J';
int n = 0;
if ( argv[1] ) n = std::atoi( argv[1] );
for ( char c = A; n-- > 0; c == J ? c = A : ++c ) std::cout << c << std::endl;
}
输出结果与上面相同。
另一种方法。
#include <iostream>
#include <cstdlib>
int main( int argc, char **argv )
{
const char *letters = "ABCDEFGHIJ";
int n = 0;
if ( argv[1] ) n = std::atoi( argv[1] );
for ( const char *p = letters; n-- > 0; *++p ? p : p = letters )
{
std::cout << *p << std::endl;
}
}
至于你的代码,你不应该使用像65或75这样的幻数。首先,它很难理解代码,而在其他编码系统中,例如EBCDIC,这些神奇的数字是没有意义的。
也在此代码段中
if(letter == 75)
{
int letter = 65;
}
您正在声明另一个名为letter
的局部变量,该变量在结束括号后不会存活。所以这段代码片段也没有意义。