vprintf一般在什么时候用

vprintf一般在什么时候用,第1张

多数情况下使用printf() 。只有当你需要自己写一个printf()那样的专有函数的时候才需要vprintf()。比如你写一个自己专门的错误输出函数:

int error(char *fmt, ...)

{

    int result

    va_list args

    va_start(args, fmt)

    // 一些内容

    va_end(args)

    return result

}

应当注意到,你不能转发参数给printf,因为printf是变长参数的,而不是vprintf的单独一个va_list。然而vprintf() 函数, 只取一个合并的va_list 参数, 所以完整的版本是:

int error(char *fmt, ...)

{

    int result

    va_list args

    va_start(args, fmt)

    fputs("Error: ", stderr)

    result = vfprintf(stderr, fmt, args)

    va_end(args)

    return result

}

#include <stdio.h>

#include <malloc.h>

#define M 10

typedef struct bnode

{

char data

struct bnode *lchild

struct bnode *rchild

}Bnode, *BTree

/*建立二叉树*/ 

void creat_BTree(BTree* T)

{

char n

n=getchar()

if(n=='#') *T=NULL

else if(n=='\n') return

    else 

{

(*T)=(BTree)malloc(sizeof(Bnode))

(*T)->data=n

creat_BTree(&(*T)->lchild)

creat_BTree(&(*T)->rchild)

}

}

/*前序遍历*/ 

void  r_preorder(BTree T)

{

if(T)

{

        

printf("%c",T->data)

r_preorder(T->lchild)

r_preorder(T->rchild)

}

}

/*后序遍历*/ 

void r_posorder(BTree T)

{

if(T)

{

r_posorder(T->lchild)

r_posorder(T->rchild)

printf("%c",T->data)

}

}

/*层次遍历*/

void r_levelorder(BTree T)

    BTree q[1024]  

    BTree p 

    int front=0,rear=0  

    if(T)

    {

      q[rear]=T 

      rear=(rear+1)%M 

    }  

    while(front!=rear)

    {   

      p=q[front]     

      printf("%c ",p->data) 

      if(p->lchild)

      { 

         q[rear]=p->lchild    

         rear=(rear+1)%M 

      } 

      if(p->rchild)

      { 

          q[rear]=p->rchild

          rear=(rear+1)%M 

      }

      front = (front+1)%M 

   }

}

int main()

{

BTree T

T=NULL 

int select

while(1)

{

printf("\n请选择要进行的 *** 作:\n")

printf("  1  创建二叉树\n")

printf("  2  前序遍历\n")

printf("  3  后序遍历\n")

printf("  4  层次遍历\n")

printf("  5  结束程序\n")

printf("=========================\n")

scanf("%d",&select)

    getchar()

switch (select)

{

case 1:

{

printf("请按前序次序输入各结点的值,以#表示空树(输入时可连续输入)\n")

creat_BTree(&T)

break

}

case 2:

{

if(!T) printf("未建树请先执行1 *** 作建树!\n")

else r_preorder(T)

break

}

case 3:

{

if(!T) printf("未建树,请先执行1 *** 作建树!\n")

else r_posorder(T)

break

}

case 4:

{

if(!T) printf("未建树,请先执行1 *** 作建树!\n")

else r_levelorder(T)

break

}

default:

   } 

}

}

因为你在VC下编写的程序用到了VC的函数库,比如socket这个套接口函数在VC中的头文件时WinSock.h

而到了Linux系统下的编辑器g++中

就是netinet/in.h了

当然不会通过编译。而且VC编译器把你得程序生成目标文件

连接函数库这些过程都给你做好了。但是在别的编辑器下

比如g++这些都要你自己来写makefile文件来完成。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11384689.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存