需要帮助创建一个循环

时间:2015-07-16 10:39:34

标签: c++

我的循环需要能够生成字母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 

5 个答案:

答案 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的局部变量,该变量在结束括号后不会存活。所以这段代码片段也没有意义。