TCL里提到的例程

1、printf / scanf

知识点:变长参数函数使用:

头文件#include<stdarg.h>

使用va_list ap; 来声明一个变长参数类型的变量ap,即argument pointer。

使用va_start(ap, fmt); fmt为最后一个有名参数(函数原型void print(char *fmt, ...)),ap将被设置为指向第一个无名参数的指针。

使用ival = va_arg(ap, int);来获得一个参数,类型由va_arg的第二个参数决定,并且ap指向下一个参数。

va_end(ap); 在函数返回前调用,完成相关清理工作。

#include<stdio.h>
#include<stdarg.h>

int main()
{
    print("%d %d",1,2);
    return 0;
}

void print(char *fmt, ...)
{
    va_list ap;
    char *p, *sval;
    int ival;
    double dval;

    va_start(ap, fmt);
    for(p = fmt; *p; p++){
        if(*p != ‘%‘){
            putchar(*p);
            continue;
        }
        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);
}

void print(char *fmt, ...)

时间: 2024-10-23 20:33:46

TCL里提到的例程的相关文章

贴一下WC总结里提到的那道裸题吧。。。

[bzoj4034][HAOI2015]T2 试题描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a . 操作 3 :询问某个节点 x 到根的路径中所有点的点权和. 输入 第一行包含两个整数 N, M .表示点数和操作数. 接下来一行 N 个整数,表示树中节点的初始权值. 接下来 N-1 行每行三个正整数 fr, to , 表示该树中存在一条边

群里提到的IE设置问题 ---B/S 下页面刷新问题

这里面四个选项的含义 下面是每个选项的作用和意义: 1. "每次访问此页时检查"选项表示浏览器每次访问一个页面时,不管浏览器是否缓存过此页面,都要向服务器发出访问请求.这种设置的优点是实时性很强,肯定能够访问到网页的最新内容,但是如果网页内容很少更新,这种设置的访问效率就比较低了. 2. "每次启动Internet Explorer时检查"选项表示在浏览器的每次启动运行期间,在第一次访问一个页面时,不管浏览器是否缓存过此页面,都要向服务器发出访问请求,但是在浏览器的

教程里提到的链式调用

举个例子: 现在很多网站都搞REST API,比如新浪微博.豆瓣啥的,调用API的URL类似: http://api.server/user/friends http://api.server/user/timeline/list 如果要写SDK,给每个URL对应的API都写一个方法,那得累死,而且,API一旦改动,SDK也要改. 利用完全动态的__getattr__,我们可以写出一个链式调用: class Chain(object): def __init__(self, path=''):

把别人的Tcl/Tk代码加入到Go语言里15 游戏8 翻牌游戏

这次文章主要引用了网上的这篇教学http://www.cwflynt.com/TclForTeens/ 步骤a 下载第17课里提到的扑克图像包 http://www.cwflynt.com/TclForTeens/cards.zip 解压缩cards.zip内所有文件到c:\cards\目录下 [你可以放在桌面的cards目录里,随意] 步骤b 跳到第20课http://www.cwflynt.com/TclForTeens/lsn20.html 找到最后一段框起来的源代码,它的上一句是"And

把别人的Tcl/Tk代码加入到Go语言里14 游戏7 行星游戏

a 首先打开网页 http://wiki.tcl.tk/13601 b 把网页里提到的第一段tcl/tk代码复制到如下go源代码的init_script字符串常量里 package main import "github.com/nsf/gothic" const init_script = ` #把Tcl/Tk源代码复制到这个常量里 ` func main() { ir := gothic.NewInterpreter(init_script) <-ir.Done } c 在L

把别人的Tcl/Tk代码加入到Go语言里10 游戏3 简单的跑车

a 首先打开网页 http://wiki.tcl.tk/4364 [Car racing in TclUpdated 2011-08-25 01:30:05 by RLE] b 把网页里提到的tcl/tk代码复制到如下go源代码的init_script字符串常量里 package main import "github.com/nsf/gothic" const init_script = ` #把Tcl/Tk源代码复制到这个常量里 ` func main() { ir := goth

tcl脚本学习八:while循环的使用

lesson8 :while循环的使用 1. set x 1;while {$x < 5} { puts "x is $x"; set x [expr $x + 1] }//tcl里面的while 记得以{结束第一行,原因是告诉编译器这段话没结束 2. set x 0;while "$x < 5" { set x [expr $x + 1] if {$x > 7} break; if "$x > 3" continue;

派遣例程与IRP结构

提到派遣例程,必须理解IRP(I/O Request Package),即"输入/输出请求包"这个重要数据结构的概念.Ring3通过DeviceIoControl等函数向驱动发出I/O请求后,在内核中由操作系统将其转化为IRP的数据结构,并"派遣"到对应驱动的派遣函数中,如图21.1.6所示. Ring3程序调用kernel32.dll导出的DeviceIoControl函数后,会调用到ntdll.dll导出的NtDeviceIoControlFile函数,进而调用

TCL:使用、添加库文件

>直接引用工具自带的库文件 通过指令: 1.1查看能直接调用的库文件路径 #可以查到工具默认库文件路径,一般包括回显中的路径以及回显中路径的父路径. info library #D:/Script.NET/V2/Interps/Tcl/Lib/tcl8.4 1.2.在上一步的路径下找找没有自己需要的库,通过指令: package require xxx 引用,一般直接写tcl文件名即可,如果不对,查看pkgIndex.tcl里package ifneeded 后边的名称. >引用别人的库文件或