我决定编写<table id = "menu-container" border = "2">
<caption>Main Dish<caption>
<tr>
<?php
if($result->num_rows > 0)
{
$i=0;
while($row = $result->fetch_assoc())
{
?>
<td class = "wrapword">
<img src = "data:image/jpeg; base64 , <?php echo base64_encode($row['product_image']); ?>"
height = "290" width = "350">
<br>
Name: <?php echo $row['product_name']; ?>
<br>
Price: Php<?php echo $row['product_price']; ?>
<label id = "add-to-list">Add to list</label>
</td>
<?php
$i++;
if($i%4==0 && $i<$result->num_rows) echo '</tr><tr>';
}
}
else
{
echo "No Menu Found";
}
?>
</tr>
</table>
C函数的变体,而不是返回scan
表示成功或失败会打印错误消息并在出错时中止程序。
int
问题是写代码而不是void aborting_scanf(const char *format, ???) {
if (scanf(format, &var) != 1)
puts("Invalid input");
exit(1);
}
,在the man page中,类型签名是:
???
但是,我如何命名目标变量?
理论上我可以手工为每种类型编写一个版本,但它会非常重复,所以我正在寻找一种更通用的解决方案来避免代码重复。
答案 0 :(得分:4)
您需要使用variable arguments以及vscanf
:
void aborting_scanf(const char *format, ...) {
va_list ap;
va_start(ap, format);
if (vscanf(format, ap) != 1) {
puts("Invalid input");
exit(1);
}
va_end(ap);
}
...
参数告诉编译器剩下的参数有不同的类型和数字,可以是任何东西。 va_list
类型的变量允许您访问这些值,vscanf
函数可以直接读取它。
答案 1 :(得分:1)
scanf
使用变量参数列表,如...
参数所示。您可以使用stdarg.h
中的函数来操纵它们。这种格式不适合全面介绍变量参数列表,阅读有关它的教程/书籍。