下午好!我对以下代码有一些疑问。
[1] for循环中的中间条件是什么意思?; *p;
和; *sval;
- 到达输入字符串的结尾?如果是,如何确定?
[2] 我不明白那个复杂的 for 循环。
假设如果条件不满足*p == %
,那么我们立即进入 switch。现在让我们考虑相反的情况,尽管 ,我们输入每个其他字符%
,如果满足,那么我们使用 continue 并在switch
之后继续。那这两种情况有什么区别呢?我一定是大错特错了,但我现在2个多小时都找不到我的错误……
#include <stdarg.h>
/* minprintf: minimal printf with variable argument list */
void minprintf(char *fmt, ...)
{
va_list ap; /* points to each unnamed arg in turn */
char *p, *sval;
int ival;
double dval;
va_start(ap, fmt); /* make ap point to 1st unnamed arg */
for (p = fmt; *p; p++) { /* [1] */
if (*p != '%') {
putchar(*p);
continue; /* [2] */
}
switch (*++p) {
case 'd':
ival = va_arg(ap, int);
printf("%d", ival);
break;
case 'f':
dval = va_arg(ap, double);
printf("%f", dval);
break;
case 's':
for (sval = va_arg(ap, char *); *sval; sval++)
putchar(*sval);
break;
default:
putchar(*p);
break;
}
}
va_end(ap); /* clean up when done */
}
非常感谢您的帮助!