当我处理一个问题时,指出给定任何正整数,我需要设计一个程序,以便在两个连续的数字之间创建一个空格。 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
}
}
答案 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获取下一个数值并打印出来。当最后一个整数打印时,缓冲区变空并等待用户输入数字