scanf(“%d /%d /%d)在C中是什么意思?

时间:2019-07-04 10:38:16

标签: c input

<?php
header('Content-Type: text/html; charset=utf-8');

$csr = $_POST['csr'];
$key = $_POST['key'];
$crt = $_POST['crt'];

if (!$csr || !$key || !$crt) {
    die('Files not specified. Go back and try again');
}

$hashCsr = exec("openssl req -in $csr -pubkey -noout -outform pem | sha256sum");
$hashKey = exec("openssl pkey -in $key -pubout -outform pem | sha256sum");
$hashCrt = exec("openssl x509 -in $crt -pubkey -noout -outform pem | sha256sum");

echo "<p><strong>File:</strong> $csr <strong>Hash:</strong> $hashCsr</p>";
echo "<p><strong>File:</strong> $key <strong>Hash:</strong> $hashKey</p>";
echo "<p><strong>File:</strong> $crt <strong>Hash:</strong> $hashCrt</p>";

if (($hashCsr === $hashKey) && ($hashCsr === $hashCrt) && ($hashKey === $hashCrt)) {
    echo "<p style='color: green;'>Certificates match!</p>";
}
else {
    echo "<p style='color: red;'>Certificates do NOT match!</p>";
}
?>

我看到此代码以DD / MM / YYYY格式接收生日,但是我想知道放置'/'的含义是什么,我知道如果没有这个,由于字符'/'会导致输入错误。那到底是什么意思?

5 个答案:

答案 0 :(得分:1)

遇到无法理解的代码并且正在从库中调用某个函数时,您的首要任务是研究该函数的文档。对于C标准函数,只需搜索函数名称即可。

在这种情况下,cppreference是一个很好的参考(不要被网站名称所误导,这是C参考,而不是C ++参考)。该函数的定义为

int scanf( const char *format, ... );​

现在查找format参数的参数说明:

  

指向以空值结尾的字符串的指针,该字符串指定如何读取输入。

后续文本说明了如何读取格式字符串。特别是:

  
      格式字符串中的
  • […]字符[%除外]消耗了与输入流完全相同的一个字符,或者如果流中的下一个字符不相等则导致函数失败。
  •   
  • 转换规范[采用以下格式]      
        
    • 介绍性字符
    •   
    • 转换格式说明符
    •   
    • d-匹配十进制整数
    •   
  •   

换句话说:

scanf根据格式字符串解析文本输入。在格式字符串中,/实际上在用户输入中匹配斜杠。 %d匹配一个十进制整数。

因此,scanf("%d/%d/%d", …)将匹配由三个用斜杠分隔的整数组成的字符串,并将数字值存储在指向的变量内。

答案 1 :(得分:0)

只是日期格式的分隔符。当某些函数搜索那些/时,必须引发该错误。

答案 2 :(得分:0)

scanf的第一个参数是一个字符串,该字符串指定要用于在其他自变量中存储信息的字符串的格式。您可以将这种格式的字符串视为一种模式:%d表示整数,没有'%'表示仅需完全匹配字符。

答案 3 :(得分:0)

预计输入将提供04/07/2019之类的内容。 如果仅提供输入04072019。单独currD保留值04072019,因为未初始化,currM和currY可能会浪费值。

答案 4 :(得分:0)

它期望输入的格式为三个整数,两个整数之间用两个斜杠(“ /”)隔开。例如:10/11/1999