如何解决将ASCII表放在一起的循环嵌套代码?

时间:2019-02-16 00:00:33

标签: c++

我想从ASCII表中从33-47和-58循环到64和91到96,然后全部显示在一起,但是我认为我做错了。我该如何解决?

我正在将Windows 8和代码块用作IDE

int main()
{
    for(int i=33; i<=47 ;i++){
        for(int j=58; j<=64;j++){
             for(int z=91; z<=96;z++){
                std::cout << (char)z;
            }
        }
    }
    return 0;
}

循环完成后,应显示为

!“ ##%&'()* +,-。/ :; <=>?@ [] ^ _`{|}〜

3 个答案:

答案 0 :(得分:5)

您将这些循环嵌套的方式将在循环1的每个迭代中运行整个循环2,而循环2的每个迭代将在整个循环3中运行。

由于只需要一个输出字符串,因此可以通过三个单独的循环来实现所需的功能。

$conn = new mysqli("localhost", "root", "", "admin");
if ($conn->connect_error) {
    die('Connect Error (' . $conn->connect_errno . ') ' . $conn->connect_error);
}
$result = $conn->query("SELECT * FROM users where     username = '$username' and password = '$password'")
or die ("Failed to query database "     .$conn->error);
if ($row = $result->fetch_array()) {
    echo "login success!!! Welcome " .$row['username'];
} 
else {
    echo "Failed to login!";
}

希望此页面可以为for循环嵌套https://www.tutorialspoint.com/cplusplus/cpp_nested_loops.htm

提供更详尽的说明

答案 1 :(得分:4)

让我们退后一步...

典型的for循环如下所示(有关详细信息,请参考cppreference):

for ( init; condition; increment) {
    loop-body
}

等效于:

{
    init;
    while(condition) {
        loop-body
        increment
    }
}
放入循环体中的

所有都会重复执行,直到条件为false(即whiletrue)为止。例如

for (int i= start; i < stop; ++i) foo(i);

函数foo将被调用(stop-start)次。

您的代码

要查看代码的实际作用,可以添加一些cout

int main() {
    for(int i=33; i<=47 ;i++){
        for(int j=58; j<=64;j++){
            for(int z=91; z<=96;z++){
                std::cout << "i = " << i;
                std::cout << "j = " << j;
                std::cout << "z = " << z;
            }
        }
    }
}

或使用调试器。

嵌套循环

要清楚:您不需要将循环嵌套在代码中,(嵌套)循环通常是不需要的。话虽如此,您可以使用嵌套循环的一个随机示例是打印*

的矩形
int height = 5;
int width = 5;
for (int i=0; i<height; ++i) { 
    for (int j=0; j<width; ++j) { 
        std::cout << "*";
    }
    std::cout << "\n";
}

环路?

  

我想从33-47和-58循环到64,从91循环到ASCII 96   表格,然后一起显示

只要做一件事情

for (char c=33; c<48; c++) { std::cout << c; }
for (char c=58; c<65; c++) { std::cout << c; }
for (char c=91; c<97; c++) { std::cout << c; }

无循环

  

循环完成后,应该这样显示

     

!“ ##%&'()* +,-。/ :; <=>?@ [] ^ _`{|}〜

目前还不清楚为什么要循环播放。如果要打印这些字符,可以通过

进行打印
std::cout << "!\"#$%&'()*+,-./:;<=>?@[]^_`{|}~\n";

请注意,您必须隔开"(即在前面放置\)。

循环

如果您确实编写了循环,请尝试避免使用幻数。而是使用start / stopheight / width33 / 48中给数字起有意义的名称。如果可以,请使用迭代器代替索引。 Range-based for loops甚至允许您忽略迭代器,如

std::string outp = "!\"#$%&'()*+,-./:;<=>?@[]^_`{|}~";
for (auto letter : outp) std::cout << letter;

答案 2 :(得分:2)

您正在处理三个值范围,因此希望循环遍历这些范围。对于每个范围,您都希望循环遍历该范围内的值。

您可以这样做:

int main()
{
    std::vector<std::pair<int, int>> v{{33, 47}, {58, 64}, {91, 96}};
    for (auto p : v)
    {
        for (int i = p.first; i <= p.second; i++)
        {
            std::cout << static_cast<char>(i);
        }
    }
    return 0;
}
相关问题