为什么这个scanf()的两个不同的输入会给出两个不同的输出?

Why does two different input to this scanf() gives two diffrent outputs?

本文关键字:两个 输出 scanf 输入 为什么      更新时间:2023-10-16
#include <iostream>
using namespace std;
int main()
{
int n,m;
scanf("%d : %d",&n,&m);
cout<<n<<m;
}

为什么给定 1 2 的输入给出输出10,而输入 1:2 给出输出 12。

根据您的描述运行不同的代码示例后。我发现,scanf("%d :%d")将侦听用户的输入,并且当提供(value1:value2)类型的输入时:将用作分隔符。而如果您不提供带有:的输入,它将仅选择初始值并将GARBAGE值分配给后面的值。

您可以使用不同的字符(例如/(代替:,它将以相同的方式工作。

scanf仅在输入与提供的格式匹配的情况下读取(并分配(。所有其他参数(即不匹配的参数(保持不变。scanf的返回值是匹配(并已分配(的项目数。

若要说明这一点,请参阅以下程序。我正在使用sscanf并以字符串而不是用户输入的形式传递参数;但结果与您使用scanf并在控制台中输入值时相同:

int main()
{
int n=0,m=0;
int itemsScanned = 0;
itemsScanned = sscanf("1:2","%d : %d",&n,&m);
std::cout << "items scanned: " << itemsScanned << "; n: " << n << "; m: " << m << std::endl;
n=0;m=0;  // reset...
itemsScanned = sscanf("1 2","%d : %d",&n,&m);
std::cout << "items scanned: " << itemsScanned << "; n: " << n << "; m: " << m << std::endl;
}

输出:

items scanned: 2; n: 1; m: 2
items scanned: 1; n: 1; m: 0