当我处理一个问题时,说明给定任何正整数,我需要设计一个程序,以便它在 2 个连续数字之间创建一个空格。2小时无济于事,我决定在线谷歌以获得一些提示。我获得了以下代码,它运行良好。但是,我不明白代码是如何工作的,尤其是 if。如果输入12345
,我看不出如何满足条件.
int main()
{
char b; //stores the digit
cin >> b; //get single character from user input
while (b != ' ') //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
}
}
当用户键入任何内容时,程序会将其存储在缓冲区中(将缓冲区视为计算机访问的字符串)。
当程序到达cin >> b;
时,它会检查缓冲区。由于用户尚未键入任何内容,因此缓冲区为空。因此,程序等待用户键入某些内容。 用户键入12345[enter]
。这被放入缓冲区中,cin 使用缓冲区填充cin >> b;
。
这是做什么的?b
是一个字符,一个 ASCII 字符。所以b
需要一个字符,cin
缓冲区中提供了第一个字符,这里是1
。 (2345[enter]
留在缓冲区中)。
然后程序评估条件(b >= '0' && b <= '9')
.这里重要的是要看到'1'
和'9'
不是int
,他们也是角色!因此,程序比较这些字符的数值,碰巧所有数字字符都按顺序放置,中间没有其他字符。因此,如果b
包含数字字符,则条件为真,因此我们可以打印带有以下空格的b
。 然后,程序将请求缓冲区中的下一个字符,在我们的示例中'2'
。因此b
只会逐个检查字符,而不是一次检查所有条目!
程序如何停止?如注释中所述,while 循环在b= ' '
时结束。' '
是一个特殊字符,一个空终止符,用于字符串的结尾。因此,当 while 循环到达用户输入的末尾时,此程序结束。
当您在字符编译器中输入 integer>9 时,会将其存储为字符串。
如果在代码中删除第二个CIN程序进入无限循环并继续打印第一个整数。
第二个 CIN 从 B 中获取下一个数值并打印出来。 打印最后一个整数时,缓冲区为空并等待用户输入数字