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

时间:2020-06-18 15:40:35

标签: c++

spark = sparkSession.newSession()

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

2 个答案:

答案 0 :(得分:0)

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

您可以使用诸如/之类的不同字符来代替:,并且它将以相同的方式工作。

答案 1 :(得分:0)

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
相关问题