不了解连续数字之间的空格代码

时间:2019-05-11 08:30:07

标签: c++

当我处理一个问题时,指出给定任何正整数,我需要设计一个程序,以便在两个连续的数字之间创建一个空格。 2小时无济于事,我决定在线上Google以获取一些提示。我获得了以下代码,它可以完美运行。但是,我不明白代码是如何工作的,尤其是if。如果输入为12345,我看不到如何满足条件。

int main()
{
    char b; //stores the digit
    cin >> b; //get single character from user input
    while (b != '\0') //while not at null terminator from user pressing enter
    {
        if (b >= '0' && b <= '9') //if entered character is a digit
        {
            cout << b << " "; //print character with a space
        }
         cin >> b; //get next character to check if it is null terminator or another digit
    }
}

2 个答案:

答案 0 :(得分:1)

当用户键入任何内容时,程序会将其存储在缓冲区中(将缓冲区视为计算机可以访问的字符串)。

程序到达12345[enter]时,它将检查缓冲区。由于用户尚未输入任何内容,因此缓冲区为空。因此,程序会等待用户键入内容。 用户键入cin >> b;。这放在缓冲区中,cin使用缓冲区来填充b

这是做什么的? b是一个字符,一个ASCII字符。因此cin需要一个字符,而1提供了缓冲区中的第一个字符,这里是2345[enter]。 (将(b >= '0' && b <= '9')保留在缓冲区中)。

然后程序评估条件 '1'。请务必注意,'9'int不是b,它们也是字符!因此,该程序将比较这些字符的数值,并且碰巧所有数字字符都按顺序放置,中间没有其他内容。因此,如果b包含数字字符,则条件为true,因此我们可以使用以下空格打印'2'。 然后,程序将询问缓冲区中的下一个字符,在我们的示例中为b。因此b= '\0'只会一个接一个地检查字符,而不是一次检查所有的字符!

程序如何停止?如注释中所述,while循环在'\0'时结束。 {{1}}是一个特殊字符,为空终止符,用于字符串的结尾。因此,当while循环到达用户输入的结尾时,该程序结束。

答案 1 :(得分:-1)

在字符编译器中输入整数> 9时,将其存储为字符串。

如果在代码中删除了第二个cin程序,则会进入无限循环并继续打印第一个整数。

second cin从b获取下一个数值并打印出来。当最后一个整数打印时,缓冲区变空并等待用户输入数字