(1/4)?printf("\nPlease Input a num!:"); scanf函数("%d",&t); for(i=0;i<7;i++)

#include &stdio.h&int T[100];int P[100];bool Input(){int p=0;char buf[1024];i=0;while(scanf("%c",&buf[p])!=EOF){
if(buf[p]==10)
if(p==0)return 1;
sscanf(buf,"%d %d",&T[i],&P[i]);
p++; }return 0;}void output(){
for(j=0;j&i;j++)
printf("%d %d\n",T[j],P[j]);
printf("\n");}int main(){
while(Input())output();
return 0;}
5.sscanf用于分析字符串sscanf可以支持格式字符%[] 这为分析字符串提供了很大方便(其实scanf也支持%[])先看一下%[] 格式:(1)-: 表示范围,如:%[1-9]表示只读取1-9这几个数字 %[a-z]表示只读取a-z小写字母,类似地 %[A-Z]只读取大写字母(2)^: 表示不取,如:%[^1]表示读取除'1'以外的所有字符 %[^/]表示除/以外的所有字符(3),: 范围可以用","相连接 如%[1-9,a-z]表示同时取1-9数字和a-z小写字母 (4)原则:从第一个在指定范围内的数字开始读取,到第一个不在范围内的数字结束%s 可以看成%[] 的一个特例 %[^ ](注意^后面有一个空格!)这样使用sscanf+%[]可以轻松的分析字符串,很多字符串问题便迎刃而解了。以hrbeu3001为例(不是完整代码,没有要求的格式)只需2个sscanf函数,就能完成题目的要求,代码非常简洁。
#include &stdio.h&#include &string.h&int main(int argc, char *argv[]){
char buf[1024],str1[100],str2[100],str3[100],str4[100],temp[100]="&default&";
scanf("%d",&count);
while(count--)
str1[0]='\0';
str2[0]='\0';
str3[0]='\0';
str4[0]='\0';
scanf("%s",buf);
sscanf(buf,"%[^:]://%[^:,/]:%[,1-9]",str1,str2,str3,str4);
sscanf(buf,"%[^:]://%[^:,/]/%[a-z,A-Z,/,~]",str1,str2,str4);
if(str3[0]=='\0')strcpy(str3,temp);
if(str4[0]=='\0')strcpy(str4,temp);
printf("%s\n%s\n%s\n%s\n",str1,str2,str3,str4);
return 0;}
Remember Me?
&&&&&&&&&&&&&&
[使用Ctrl+Enter键可以直接提交]以下程序的运行结果是。main(){int k=4,a=3,b=2,c=1;printf(“%d\n”,k&a?k:c&b?c:a);} A)4 B)3 C)2 D_百度知道
以下程序的运行结果是。main(){int k=4,a=3,b=2,c=1;printf(“%d\n”,k&a?k:c&b?c:a);} A)4 B)3 C)2 D
以下程序的运行结果是。main(){int k=4,a=3,b=2,c=1;printf(“%d\n”,k&a?k:c&b?c:a);}A)4 B)3 C)2 D)1
提问者采纳
Dk&a?k:c&b?c:a第一步:k&a
错误,进入语句2
c&b?c:a第二步:c&b
其他类似问题
printf的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁计算机技术基础(c语言)课程设计 学生成绩管理系统_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
58页免费30页1下载券13页免费13页免费10页免费25页免费38页免费7页免费12页2下载券17页1下载券
喜欢此文档的还喜欢3页1下载券23页2下载券5页1下载券35页2下载券
计算机技术基础(c语言)课程设计 学生成绩管理系统|
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢1:C语言中调用函数时,到底什么时候用&T,什么时候用T?(类似于& ,*也是)_百度知道
1:C语言中调用函数时,到底什么时候用&T,什么时候用T?(类似于& ,*也是)
我现清楚&址符*指针比char *a 定义a 指向char类型指针;
a=&m指m址赋给a .基本*&操作我都懂!主函数调用其函数传参数点迷糊知道候该用候该用求神详细解释面问题typedef struct BitNode{ElemT struct BitNode *lchild,* //定义要* 行行}BitNode,*BiT
//定义要* 行行BitNode与*BiTree别啥用int InitBiTree(BiTree *T);//*太懂int CreateBiTree(BiTree *T);int PreOrderTraverse(BiTree T);//要*?int main(){ BiTree T; InitBiTree(&T);//定义要& 行行 printf(&请输入先序构造:\n&); CreateBiTree(&T); printf(&先序输\n&); PreOrderTraverse(T);//要&?return OK;}int InitBiTree(BiTree *T){ //定义要* 行行 T=NULL; return OK;}int CreateBiTree(BiTree *T){ ElemT scanf_s(&%c&,&ch); if(ch=='#') *T=NULL; else {
if (!(*T = (BitNode *)malloc(sizeof(BitNode)))) exit(-1);
(*T)-&data =
CreateBiTree(&((*T)-&lchild)); //定义要*&行行
CreateBiTree(&((*T)-&rchild)); } return OK;}int PreOrderTraverse(BiTree T){ if(T){
printf(&%c&,T-&data);
PreOrderTraverse(T-&lchild);
提问者采纳
问二叉树吧首先于lchild
rchild,应该明确指针类型每树本身树所lchildrchild应该指向BitNode类型指针所加*至于*BiTree认 BitNode 等价于*BiTree意思BiTree所指向空间内容BitNode类型数据主函数始定义BiTree T处T指向BitNode指针说白程序凡用BiTree定义都用BitNode*替换于初始化函数InitBiTree参数指向BiTree指针函数体应该错吧应该*T=NULL;主函数调用该函数主函数用T址传递给形参T即实参&T想想看我改变T面值(实际址)我初衷T面值用寻找我真要操作单元用*T便指向我所要单元(我指函数体内操作)二叉树系列函数发现改变二叉树本身结构比初始化我让新树指向NULL接CreateBiTree涉及结点插入改变二叉树结构其递归调用CreateBiTree(&((*T)-&lchild)); *T意思找T所指BiTree类型数据数据才能使用lchild前面&取lchild址函数声明参数要BiTree*取址赋给BiTree* T (T面放址)主函数面现函数叫做调用前面加&取址传递给形参些改变二叉树结构函数比PreOrderTraverse(T-&lchild);二叉树内容输该函数实参自值赋给形参形参所操作都与实参关即形参自辟块空间空间值都照实参原复制遍函数操作形参片空间完说要改变二叉树结构内容要用指针做参数需要改变用指针倒显余用普通值传递定义变量现*,则表示定义指针使用指针变量现*,加变量前面指针所指单元进行直接操作希望所帮助
提问者评价
其他类似问题
1. struct BitNode *lchild, * 定义两结构体指针类型 struct BitNode *, 用于指向其左结点右结点2. typedef 类型重定义 struct BitNode 重定义 BitNode,
struct BitNode * 重定义 BiTree, 要面要定义结构体变量 BitN 要定义结构体变量 BiT3. int InitBiTree(BiTree *T); 参数实际二级指针般用于返般调用:BiT InitTree(&p); 函数初始化功则p存放效指针4. int PreOrderTraverse(BiTree T); 函数仅仅使用指针已作返5. 第3点已经说明传指针变量址用于返面再自推敲其实真理解 void Swap(int *a, int *b) 具体实现内存角度析面指针应该理解
能用生活中的例子讲解一下*和&吗?不是很明白呢
要从内存的角度去理解才能真正明白,比如你定义了一个变量 那么 a 这个变量在内存中是存在一片区域的,也就是说,它指示一片 4 字节的内存,使用任何赋值语句 a = 10; 表示将 10 的值赋值给那块内存。而内存是有地址的,&a 即是取到了 a 这个变量在内存中的起始地址,而 * 操作是通过一个内存地址取到对应的内容,也就是说 *(&a) 与 a 是一样的效果。
按默认排序
其他3条回答
typedef struct BitNode{ElemT struct BitNode *lchild,* //定义要* 行行行否则循环定义}BitNode,*BiT
//定义要* 行行BitNode与*BiTree别啥用
//*BiTree定义结构体指针简称BitNode定义结构体简称int InitBiTree(BiTree *T);//*太懂int CreateBiTree(BiTree *T);int PreOrderTraverse(BiTree T);//要*?//用*类型变化指针int main(){BiTree T;InitBiTree(&T);//定义要& 行行//要要关键必须函数参数类型匹配printf(&请输入先序构造:\n&);CreateBiTree(&T);printf(&先序输\n&);PreOrderTraverse(T);//要&?return OK;}int InitBiTree(BiTree *T){ //定义要* 行行 //肯定行用引用代替目初始化列表用*初始化临变量T=NULL;return OK;}int CreateBiTree(BiTree *T){ElemTscanf_s(&%c&,&ch);if(ch=='#') *T=NULL;else {if (!(*T = (BitNode *)malloc(sizeof(BitNode)))) exit(-1);(*T)-&data =CreateBiTree(&((*T)-&lchild)); //定义要*&行行CreateBiTree(&((*T)-&rchild));}return OK;}
你想要改变实参的内容,那你就得用&T或*T,若只是计算实参值的结果,那就用T——就这么简单。
你问的是二叉树吧。首先对于lchild 和 rchild,应该明确它们是指针类型。每一个子树本身也是树。所以lchild和rchild应该是指向BitNode类型的指针,所以加了*。至于*BiTree,你可以认为 BitNode 等价于*BiTree。那么意思不就是,BiTree所指向的空间内容是BitNode类型的数据。如主函数一开始定义的,BiTree T。此处的T就是指向BitNode的一个指针。说白了程序中凡是用BiTree定义的,都可以用BitNode*来替换。对于初始化函数InitBiTree。他的参数为一个指向BiTree的指针。函数体应该错了吧。应该是*T=NULL;主函数调用该函数时,把主函数用T的地址传递给了形参T。即,实参是&T。想想看,如果我们改变T里面的值(实际上是一个地址),这是我们的初衷吗,T里面的值是用来寻找我们真正要操作的单元的。用*T便指向了我们所要的单元(我指的是函数体内的操作。)。二叉树的一系列函数中,你会发现有的是会改变二叉树本身的结构的。比如初始化,我们让一个新树指向NULL。还有接下来的CreateBiTree。涉及到结点的插入。这也是改变二叉树结构。其中的递归调用CreateBiTree(&((*T)-&lchild)); *T的意思是找到T所指的BiTree类型的数据。这个数据才能使用lchild。前面的&就是取lchild的地址。因为函数声明,参数要的是BiTree*。取地址,赋给BiTree* T (T里面放的就是地址)。主函数里面出现的函数叫做调用。前面加&。就是取地址,传递给形参。还有就是一些不改变二叉树的结构的函数。比如PreOrderTraverse(T-&lchild);它只是把二叉树的内容输出去。该函数,实参把自己的值赋给形参,之后形参的所有操作都与实参无关。即形参自己开辟了一块空间,空间里的值都是照实参原样复制一遍。然后函数的操作就是在形参这片空间里完成的。也就是说,如果要改变二叉树的结构内容,就要用指针做参数。如果不需要改变,用指针倒显得多余,用普通的值传递就可以了。定义变量时,出现了*,则表示定义了指针。在使用指针变量时,出现*,那也是加在变量前面的。这个是对指针所指的单元进行直接操作。希望对你有所帮助。
c语言的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 scanf函数 的文章

 

随机推荐