C语言程序中return用法

我想知道,在C语言中,return的使用让我很迷惑,很不明白,我就是想知道在什么情况下使用return?谢谢!

c

2个回答

return有两个作用,结束函数执行,返回返回值。

任何函数,实际上在函数执行到最后一行,存在一个隐含的return语句。但是有时候你希望函数提前返回,用return比用if...else...简单清晰,比如:
void foo()
{
if (cond)
1 行代码
else
100行代码
}
完全可以写
void foo()
{
if (cond)
{
1 行代码
return;
}
100行代码
}

1、主要看你写的函数是否需要返回值,如你需要1+1=2 这个函数计算得到的值2,这时你需要返回这个int类型的值;当你只是想要打印处1+1=2这个结果
,此时不需要返回值,函数为void,则无需return。
2、函数处理的终止,如有个输入框,输入的值是错误的,此时你报错后,后面的程序不能或者不想继续执行时,程序终止return。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
求助C语言中的return问题
麻烦大家解释一下return在不同返回值下的含义是什么?比如return 0; return -1; return 1; return ;(哈有这个测试用例:int ret = 0,if(传过来的地址为NULL) return ret)。希望大家能帮我详细地讲一下return的具体含义及其用法,谢谢大家!
求助C语言的猜数字游戏
C语言课程设计要求 1、 课程设计目的 1、 掌握用C语言进行程序设计的基本方法 。 2、 熟练掌握window控制台应用程序的编写。 3、 初步完成一个应用程序的设计、编码、调试,了解程序设计过程,锻炼实际应用能力。 2、 设计题目及内容 猜数字游戏: 计算机随机生成没有重复的n个数,由用户从键盘输入要猜测的数。每猜一次,电脑给出提示信息。如果用户输入的数跟计算机生成的数,数值和位置都完全相等,则胜出。 基本功能要求: 1. 随机生成没有重复的4个数。(每个数字在0-9范围内)。 2. 用户从键盘输入4个不重复的数,程序能对用户输入的数与随机生成的数进行匹配,并给出提示信息:“有 x个数数值和位置都相同!有 y个数数值相同,但位置不同。” 3. 控制用户的尝试次数为10次。 4. 计算、输出并保存用户的得分,计分规则:总分是100分,每失败一次扣10分。 5. 有操作菜单,能根据不同选择运行不同功能: 1:开始游戏! 2:查看上次成绩! 3:输出帮助信息! 0:退出程序! 扩展功能要求: 1. 对用户输入的数字进行检查,如果用户输入重复的数,给出提示,要求重新输入。 2. 能对游戏进行设置:在操作菜单中增加相应的选项:“4:系统设置”。 (1) 修改要猜的数字的个数n,根据修改后的n值,计算机可随机生成n个数,用户进行n个数的猜测游戏。 (2) 修改可以尝试的次数。 3. 若游戏胜出且成绩在前五名,可输入并记录对应的用户姓名,并添加到积分榜中。操作菜单中相应选项改为“2:积分榜!”,用于把积分榜中保存的前五名成绩及用户姓名显示出来。 4. 能对积分榜的成绩进行排序和输出。 提示:(1)生成一个0~9的随机数,使用rand函数: #include<stdio.h> #include<stdlib.h> //使用rand函数必须使用此头文件 #include<time.h> int main() {​int a; ​ ​srand(time(0)); //生成一个种子。整个程序只写一次即可。 ​ ​a=rand()%10; //生成一个随机数。 ​ printf("%d\n",a); ​ ​return 0; } (2)保证生成的n个数不重复: 可用数组记录生成的数,每生成一个数,要与之前已经生成的进行比较,如果有相同的​重新生成,直到不相同。
Xcode下运行C语言的简单程序返回结果跟老师视频讲解不一致,求原因?
我自己自学c语言,跟着郝斌老师的视频学习,电脑是用的mac,安装的xcode,按照老师的讲解编辑了一段代码,运行后返回的结果不一样,肯请高手给予帮助,非常感谢。下面贴出我编辑的代码和返回的结果的截图, // // main.c // scanf的用法 // // Created by 田小岭 on 2019/4/19. // Copyright © 2019 田小岭. All rights reserved. // # include <stdio.h> int main(void) { int i; printf ("请输入数字"); scanf ("%d",&i); printf ("i=%d\n",i); return 0; }
c语言,迷宫问题,救救孩子
该计划以此为基础它基于以下修改。 (1)指定任意位置(row,col)作为目的地而不是出口(EXIT)寻找路径。 (2)不要使用make[] []数组。 (3)当您第一次到达某个位置时,当在8个方向的相邻位置中存在目的地时,路径搜索结束。 (4)每次都随机确定寻找路径的方向。 校正方法的概要如下。 (1)指定DST_ROW和DST_COL的值而不是EXIT_ROW和EXIT_COL (2)当转到位置(i,j)时,将迷宫[i] [j]的值从0修改为-1 (3)如果它到达位置(i,j),它检查是否有8个方向相邻位置(DST_ROW,DST_COL) (4)在回溯中,让我们说(i,j,dV)从堆栈顶部弹出的内容。 dV是表示关于移动方向的信息的方向矢量,并且数据类型是整数。例如,如果dV是41,则它是8位二进制数00101001。每个位可以被称为0位,1位,......,7位来自最低有效位,位0的位0是方向N,位1是方向NE,....位7是方向它对应于西北。比特1表示方向是阻止或已经消失,值0表示尚未尝试方向。在用位置(i,j)回溯之后,从方向矢量的8位的0位指示的方向之一中随机选择尝试的方向。例如,假设dV = 41 = 00101001具有5位0,并且如果选择对应于NW的7位,如果判断移动到NW是合法移动,则移动到该位置,并且在堆栈上移动的值是(i,j,169)。因为8位二进制数10101001是十进制数169。 (A)在所示程序中,编写C代码以填充path()函数中的空白'a'和'b'。 (b)为什么C代码用'a'和'b'写,为什么没有不必要的操作 解释你需要知道和解释的内容。 (c)呈现执行(a)中完成的程序的屏幕,使用的10×10迷宫数据和目的地坐标。 解释你需要解释的内容。 #include "stdafx.h" #include <stdlib.h> #include <math.h> #define TRUE 1 #define FALSE 0 #define numRow 10 #define numCol 10 #define DST_ROW 5 // Destination coordinates row #define DST_COL 6 // Destination coordinates col #define stack_size 100 typedef struct { int row; int col; int dir_vector; // See below for a description of the direction vector. } element; typedef struct { short int vert; short int horiz; } offsets; void setup_maze(); void set_move(); void path(); int init_dir_vector(int row, int col); // Description in function definition int get_next_dir(int dir_vector); // Description in function definition void push(element position); element pop(); int top = -1; offsets move[8]; short int maze[numRow + 2][numCol + 2]; element stack[stack_size]; void main() { setup_maze(); set_move(); path(); } void setup_maze() { int i, j; short int maze0[numRow][numCol] = { { 0,0,1,0,1,1,1,0,1,0 }, { 1,0,0,1,1,1,0,1,0,1 }, { 1,1,0,1,1,0,1,0,1,1 }, { 0,0,1,0,1,1,1,0,0,0 }, { 0,1,1,0,1,0,1,0,1,0 }, { 1,0,1,1,1,1,0,0,1,0 }, { 1,1,0,1,0,1,0,0,1,0 }, { 1,0,0,0,1,0,1,0,0,0 }, { 0,1,0,1,1,1,0,1,1,0 }, { 1,0,0,1,1,1,0,0,0,0 } }; // Inbound coordinates (1,1) are not allowed if (DST_ROW == 1 && DST_COL == 1) { printf("\nThe coordinate of destination should be different from that of entrance (1,1)."); exit(0); } // Destination is not blocked. if (maze0[DST_ROW - 1][DST_COL - 1] == 1) { printf("\nmaze[DST_ROW][DST_COL] should be 0."); exit(0); } for (i = 0; i < numCol + 2; i++) maze[0][i] = 1; for (i = 0; i < numCol + 2; i++) maze[numRow + 1][i] = 1; for (i = 0; i < numRow + 2; i++) maze[i][0] = 1; for (i = 0; i < numRow + 2; i++) maze[i][numCol + 1] = 1; for (i = 1; i <= numRow; i++) for (j = 1; j <= numCol; j++) maze[i][j] = maze0[i - 1][j - 1]; } void set_move() { move[0].vert = -1; move[0].horiz = 0; move[1].vert = -1; move[1].horiz = 1; move[2].vert = 0; move[2].horiz = 1; move[3].vert = 1; move[3].horiz = 1; move[4].vert = 1; move[4].horiz = 0; move[5].vert = 1; move[5].horiz = -1; move[6].vert = 0; move[6].horiz = -1; move[7].vert = -1; move[7].horiz = -1; } void push(element position) { stack[++top] = position; } element pop() { element position; position = stack[top--]; return position; } void path() { int i, row, col, nextRow, nextCol, dir, dir_vector, found = FALSE; element position; row = 1; col = 1; maze[1][1] = -1; dir_vector = init_dir_vector(1, 1); if (dir_vector == -1) found = TRUE; //(1,1)의 바로 이웃에 목적지가 있음 else { top = 0; stack[0].row = 1; stack[0].col = 1; stack[0].dir_vector = dir_vector; } while (top > -1 && !found) { position = pop(); 'A' while (dir < 8 && !found) { nextRow = row + move[dir].vert; nextCol = col + move[dir].horiz; 'B' } } if (found) { printf("The path is:\n"); printf("row col\n"); for (i = 0; i <= top; i++) printf("%2d%5d\n", stack[i].row, stack[i].col); printf("%2d%5d\n", row, col); printf("%2d%5d\n", DST_ROW, DST_COL); } else printf("The maze does not have a path\n"); } int init_dir_vector(int row, int col) { // input: Position coordinates // output: -1 or an integer value in the range 0 to 255 (= 2 ^ 8-1) // // If there is a destination among eight directional neighbors of a location (row, col), return -1 to terminate the route search, // If it does not exist, it initializes a direction vector represented by an integer value ranging from 0 to 255 (= 2 ^ 8-1) // // direction vector: An 8-bit string expressed as an integer value corresponding to its size // call bits 0, 1, ..., 7 from the least significant bit // bit i corresponds to direction i (i = 0, ..., 7). Example: bit 0 is north, bit 1 is north-east, ... // i bit = 1: direction i indicates that you have already tried in the path finding // i bit = 0: Indicate that i has not yet visited direction i // Initialize direction vector of position (row, col): For each of 8 directions of position (row, col), it can not be blocked // Set the corresponding bit of the direction vector to 1 if it has already gone, otherwise set it to 0. // How to perform initialization (below code): If all 8 bits are set to 1 and check each direction, reset the corresponding bit to 0 int dir, nextRow, nextCol, dir_vector; dir_vector = ((int)pow(2.0, 8.0)) - 1; // dir_vector = 255 in decimal, 11111111 in binary (8 bits in all) for (dir = 0; dir < 8; dir++) { nextRow = row + move[dir].vert; nextCol = col + move[dir].horiz; if (nextRow == DST_ROW && nextCol == DST_COL) return -1; // to report that a path is found if (!maze[nextRow][nextCol]) dir_vector -= (int)pow(2.0, (double)dir); } return dir_vector; } int get_next_dir(int dir_vector) { // input: direction vector (an integer value in the range 0-255 (= 2 ^ 8-1)) // output: direction value 0..7 or 8 // // Take the integer value representing the direction vector and set the 1 or 0 value of each 8 bits // Move to an array of size 8 (array d [8] in the code below) // Randomly selects one of the 0 bits and returns the direction value (0..7) corresponding to that bit // If there are no 0 bits, return 8 to do backtrack int dir, d[8], count, k; for (dir = 0; dir < 8; dir++) { d[dir] = dir_vector % 2; dir_vector /= 2; } // count = number of 0 bits in direction vector count = 0; for (dir = 0; dir < 8; dir++) if (d[dir] == 0) count++; if (count == 0) return 8; // Randomly select one of the count 0 bits and return the corresponding direction value (0..7) k = rand() % count + 1; for (dir = 0; dir < 8; dir++) { if (d[dir] == 0) k--; if (k == 0) return dir; } }
关于c语言指向一位数组指针用法的详细解释(C语言程序设计例题)
![图片说明](https://img-ask.csdn.net/upload/201703/22/1490193489_316173.jpg) 书中说形参(pointer是一个指向包含4个元素的一位数组指针这我能理解) 1.但是为什么(score[][4]明明是个二维数组,为什么可以将首地址作为一位数组的指针传进函数里?) 2.还有就是(pt是一个float指针,pointer也是指针为什么要写pt=*(pointer+n)) 下面有我自己打的简易代码,得到的结果是对的,但是不太明白原理,望大佬为我解惑谢谢 ``` #include<stdio.h> using namespace std; int main() { float score[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}}; //这个不是个二维数组吗? float *search(float (*pointer)[4],int n); float *p; int i,m; printf("enter:"); scanf("%d",&m); printf("m:%d\n",m); p=search(score,m); for(i=0;i<4;i++){ printf("%5.2f\t",*(p+i)); } return 0; } float *search(float (*pointer)[4],int n){ float *pt; pt=*(pointer+n); /*这里为什么要加*取pointer所指向的元素(pointer不是自己的值就是地址吗)*/ return(pt); } ```
如何使用C语言实现逆波兰运算(加减乘除)求值?
《C语言程序设计现代方法(第2版)》第十章 程序结构 编程题6 有些计算器(尤其是惠普的计算器)使用逆波兰表示法(Revers Polish Notation, RPN)来书写数学表达式。在这一表示法中,运算符放置在操作数的后面而不是操作数中间。例如,在逆波兰表示法中1+2将表示为12+,而1+2×3将表示为123×+。逆波兰表达式可以很方便地用栈求值。算法从左向右读取运算符和操作数,并执行下列步骤。 1. 当遇到操作数时,将其压入栈中。 2. 当遇到操作符时,从栈中弹出它的操作数,执行运算并把结果压入栈中。 编写程序対逆波兰表达式求值,操作数都是个位的整数,运算符为+、-、*、/和=。遇到运算符=时,将显示栈顶项,随后清空栈并提示用户计算新的表达式。这一过程持续进行,直到用户输入一个既不是运算符也不是操作数的字符为止: Enter an RPN expression: 1 2 3 * + = Value of expression: 7 Enter an RPN expression: 5 8 * 4 9 - / = Value of expression: -8 Enter an RPN expression: q 如果栈出现上溢,程序将显示消息Expression is too complex并终止。如果栈出现下溢(例如遇到表达式1 2 + +),程序将显示消息Not enough operands in expression并终止。提示:把10.2节的栈代码整合到你的程序中。使用scanf("%c", &ch)读取运算符和操作数。 10.2栈代码: ``` #include<stdbool.h> #define STACK_SIZE 100 int top = 0; int contents[STACK_SIZE]; void make_empty(void) { top = 0; } bool is_empty(void) { return top == 0; } bool is_full(void) { return top == STACK_SIZE; } void push(int i) { if (is_full()) stack_overflow(); else contents[top++] = i; } int pop(void) { if (is_empty()) stack_underflow(); else return contents[--top]; } ```
C语言:在子函数中修改结构变量中元素的值
要写一个处理学生成绩信息的程序,使用单向链表,创建,遍历已经没有问题,但在修改结点的数据时出现问题,输入数据后程序就停止运行。 修改的思路是先根据学号定位到指定结点,然后修改数据,修改函数如下 ``` void Correct(float *a,float *b,float *c,float *d,float *e,float *f) { printf("请依次输入学生正确的的英语 数学 物理 C语言成绩\n"); scanf("%f%f%f%f",a,b,c,d); *e=*a+*b+*c+*d; *f=*e/4; } ``` 程序执行到上面时总是出现问题,不知道是什么原因,也尝试过其他修改的方法:只传结点的地址,同样出现问题;查找与修改函数合并,找到结点直接修改也是有问题,不知道为什么,代码有些长,还希望有人可以指导一下,非常感谢。 完整代码如下: ``` #include<stdio.h> #include<stdlib.h> #include<string.h> struct stu{ char num[15]; char name[20]; float EngSco; float MathSco; float PhySco; float CSco; float TotalSco; float AveSco; int GoOn; struct stu * next; }; void PrtMenu(); void CreatList(struct stu **headp);/*创建链表并输入数据*/ void PrtInf(struct stu *headp);/*输出链表中的某些数据*/ void Correct(float *a,float *b,float *c,float *d,float *e,float *f);/*修改链表中某结点元素的数据*/ void PrtData(struct stu *headp);/*输出链表中的某些数据*/ struct stu* Search(struct stu *headp);/*定位需要修改的结点的地址*/ int main() { int choice; struct stu *head=NULL,*revise=NULL; Order: PrtMenu(); scanf("%d",&choice); if(choice<0||choice>5){ printf("指令错误,请重新输入指令\n"); goto Order; } else switch(choice) { case 0: system("CLS"); break; case 1: CreatList(&head);break; case 2: PrtInf(head);break; case 3: revise=Search(head); Correct(&(revise->EngSco),&(revise->MathSco),&(revise->PhySco),&(revise->CSco),&(revise->TotalSco),&(revise->AveSco));break; case 4: PrtData(head);break; case 5: return 0; } goto Order; return 0; } void PrtMenu() { printf("-----功能选择-----\n"); printf("0.清屏并显示菜单\n"); printf("1.输入学生信息\n"); printf("2.输出学生各项信息\n"); printf("3.修改学生指定数据项的内容\n"); printf("4.输出各位同学的学号、姓名、四门课的总成绩和平均成绩\n"); printf("5.退出系统\n"); printf("------------------\n"); printf("请输入指令前的序号\n"); } void CreatList(struct stu **headp) { struct stu *loc_head=NULL,*tail; loc_head=(struct stu*)malloc(sizeof(struct stu)); printf("请输入学生的学号\n"); scanf("%s",loc_head->num); printf("请输入学生的姓名\n"); scanf("%s",loc_head->name); printf("请依次输入学生的英语 数学 物理 C语言成绩\n"); scanf("%f%f%f%f",&loc_head->EngSco,&loc_head->MathSco,&loc_head->PhySco,&loc_head->CSco); loc_head->TotalSco=loc_head->EngSco+loc_head->MathSco+loc_head->PhySco+loc_head->CSco; loc_head->AveSco=loc_head->TotalSco/4; tail=loc_head; printf("继续输入请按1,输入完成请按0\n"); scanf("%d",&tail->GoOn); if(tail->GoOn==0) goto end; else while(1) { tail->next=(struct stu*)malloc(sizeof(struct stu)); tail=tail->next; printf("请输入学生的学号\n"); scanf("%s",tail->num); printf("请输入学生的姓名\n"); scanf("%s",tail->name); printf("请依次输入学生的英语 数学 物理 C语言成绩\n"); scanf("%f%f%f%f",&tail->EngSco,&tail->MathSco,&tail->PhySco,&tail->CSco); tail->TotalSco=tail->EngSco+tail->MathSco+tail->PhySco+tail->CSco; tail->AveSco=tail->TotalSco/4; printf("继续输入请按1,输入完成请按0\n"); scanf("%d",&tail->GoOn); if(!tail->GoOn) break; } end: tail->next=NULL; *headp=loc_head; } void PrtInf(struct stu *headp) { struct stu *current=headp; printf("学号\t姓名\t英语\t高数\t物理\tC语言\t\n"); while(current) { printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t\n",current->num,current->name,current->EngSco,current->MathSco,current->PhySco,current->CSco); current=current->next; } } void Correct(float *a,float *b,float *c,float *d,float *e,float *f) { printf("请依次输入学生正确的的英语 数学 物理 C语言成绩\n"); scanf("%f%f%f%f",a,b,c,d); *e=*a+*b+*c+*d; *f=*e/4; } void PrtData(struct stu *headp) { struct stu *current=headp; printf("学号\t姓名\t总分\t平均分\t\n"); while(current) { printf("%s\t%s\t%.2f\t%.2f\t\n",current->num,current->name,current->TotalSco,current->AveSco); current=current->next; } } struct stu* Search(struct stu *headp) { struct stu *current=headp; char aim[15]; int flag; printf("请输入要修改数据的学生的学号\n"); scanf("%s",aim); while(current) { flag=strcmp(current->num,aim); if(flag=0) break; else current=current->next; } return current; } ```
C语言中random和time函数的问题
color=#FFFF00][color=#FFCC00]C语言中的一个数据查找的实验 程序可以编译通过,但是连接的时候就会出bug,小白表示不知道怎么改了,请大神赐教 附连接时代码:[/color] --------------------Configuration: schtb - Win32 Debug-------------------- Linking... schtb.obj : error LNK2001: unresolved external symbol "int __cdecl random(int)" (?random@@YAHH@Z) schtb.obj : error LNK2001: unresolved external symbol "int __cdecl random(int)" (?random@@YAHH@Z) schtb.obj : error LNK2001: unresolved external symbol "int __cdecl random(int)" (?random@@YAHH@Z) nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex Debug/schtb.exe : fatal error LNK1120: 3 unresolved externals 执行 link.exe 时出错. schtb.cpp中的代码 #include <stdio.h> #include <stdlib.h> #include <afxinet.h> #include "schtb.h" //创建查找表操作 void CreatSchTb(SeqList R) { int i ; int random(int sum); //randomize() ; srand(n) ; //以相同的种子值,初始化随机数发生器 for(i=1; i<=n; i++) R[i].key = random(n*10) ;//产生随机数 } //排序查找表,采用简单选择排序 void SortSchTb(SeqList R) { int i, j, k ; for(i=1; i<n; i++) { k = i ; for(j=i+1; j<=n; j++) if (R[k].key>R[j].key) k = j ; if (k!=i) { R[0] = R[i] ; R[i] = R[k] ; R[k] = R[0] ; } } } //顺序查找操作 int SeqSearch(SeqList R, KeyType K) { int i ; R[0].key = K ; for(i=n; R[i].key!=K; i--) ; return i ; } //折半查找操作 int BinSearch(SeqList R, KeyType K) { int low = 1, high = n, mid ; while(low <= high) { mid= (low + high) / 2 ; if (R[mid].key < K) low = mid + 1 ; else if (R[mid].key == K) return mid ; else high = mid - 1 ; } return 0 ; } //输出查找表数据 void PrtSchTb(SeqList R) { int i ; for (i=1; i<=n; i++) printf("%4d", R[i].key) ; printf("\n") ; } //二叉排序树的插入操作 void InsertBST(BSTree *BT, KeyType key) { BSTNode *f, *p = *BT ;//f指向要插入的双亲结点 while(p) { if (p->key == key) return ; //有相同关键字,不插入 f = p ; p = (key<p->key) ? p->lchild : p->rchild ; } p = (BSTNode *)malloc(sizeof(BSTNode)) ; p->key = key ; p->lchild = p->rchild = NULL ; if (*BT == NULL) *BT = p ; //如果二叉排序树为空,则为根结点 else if (key<f->key) f->lchild = p ; else f->rchild = p ; } //创建二叉排序树操作 void CreatBST(BSTree *TP) { int random(int sum); int i ; *TP = NULL ; srand(n) ; for (i=1; i<=n; i++) InsertBST(TP, random(n*10)) ; } //二叉排序树的查找操作 BSTNode *SearchBST(BSTree BT, KeyType key ) { if (BT==NULL||BT->key==key) return BT ; if (BT->key>key) return SearchBST(BT->lchild, key) ; else return SearchBST(BT->rchild, key) ; } //输出二叉排序树结点的值操作,以中序遍历输出 void PrtBST(BSTree BT) { if (BT) { PrtBST(BT->lchild) ; printf("%4d", BT->key) ; PrtBST(BT->rchild) ; } } //取得当前系统时间操作 double GetTime(void) { double T; CTime t = CTime::GetCurrentTime(); int h=t.GetHour(); //获取当前为几时 int mm=t.GetMinute(); //获取当前分钟 int s=t.GetSecond(); //获取当前秒 int w=t.GetDayOfWeek(); //获取星期几,注意1为星期天,7为星期六 double hund=s/100; //struct time; //struct t; //gettime(&t); T = ((h*60+mm)*60+s)*100+hund ; return 0 ; } //主程序 void main(void) { SeqList SR, BR ; BSTree BT ; KeyType k[m] ; int i ; double t1, t2 ; int random(int sum); //randomize() ; 该用法在VC环境下不能使用,需要使用下面的用法 srand(time(0)); //产生待查找的数据 for(i=0; i<m; i++) k[i] = random(n*10) ; //顺序查找算法 printf("顺序查找算法的时间为:\n") ; CreatSchTb(SR) ; t1 = GetTime() ; for(i=0; i<m; i++) SeqSearch(SR, k[i]) ; t2 = GetTime() ; printf("%d毫秒\n", (int)(t2-t1)) ; //折半查找算法 printf("顺序查找算法的时间为:\n") ; CreatSchTb(BR) ; SortSchTb(BR) ; t1 = GetTime() ; for(i=0; i<m; i++) BinSearch(BR, k[i]) ; t2 = GetTime() ; printf("%d毫秒\n", (int)(t2-t1)) ; //二叉排序树查找算法 printf("二叉排序树查找算法的时间为:\n") ; CreatBST(&BT) ; t1 = GetTime() ; for(i=0; i<m; i++) SearchBST(BT, k[i]) ; t2 = GetTime() ; printf("%d毫秒\n", (int)(t2-t1)) ; //PrtBST(BT) ; } schtb.h中的代码 //以下是schtb.h的头文件内容。 //以下用于顺序查找和折半查找 #define n 1000 //定义查找表长度 #define m 500 //定义待查找数据个数 typedef int KeyType ; //定义关键字类型 typedef struct node { //定义查找结点结构 KeyType key ; //如果查找表的结点包含其它信息,在此加入 //InfoType otherinfo ; } NodeType ; typedef NodeType SeqList[n+1] ;//定义查找表,含有监视哨 //以下用于二叉排序树的查找 typedef struct treenode { //定义二叉排序树结点 KeyType key ; //InfoType otherinfo ; //结点的其它信息 //二叉链表结点的左右孩子指针 struct treenode *lchild, *rchild ; } BSTNode ; typedef BSTNode *BSTree ; //定义二叉排序树
C 语言 EOF和文件读写及终止输入
我在C Primer Plus中看到这样一个例子用于终止输入的方法: ``` #include <stdio.h> int main() { int ch; while((ch=getchar())!=EOF) putchar(ch); return 0; } ``` 在这个地方使用的是EOF来终止,一般EOF是用于文件读写结尾的返回,end of file, 因为EOF的值是-1,而在标准字符集中没有-1对应的值,所以可以用其来现实文件的结尾。在大多数系统中有具有一种从键盘模拟文件结尾的方法。所以这个地方使用了 EOF作为输入结尾的标志 问题来了:我们在键盘中不能输入-1,那么程序是如何读取到的这个EOF,从而终止输入的呢?怎么上面这个程序能够有效的实现最终的这个输入终止呢? 我在windows平台上运行这个程序,由于没办法输入-1,所以没办法终止程序,在linux上键入Ctrl+Z(Ctrl+Z在一些系统中可以作为文件结尾的标志) 然后linux现实的是如下的样子![图片说明](https://img-ask.csdn.net/upload/201611/05/1478336619_474167.png) 求大神指点
一段C语言程序,为什么IF判断无法成立,请直接说代码的修改方法?
#include<stdio.h> #include<stdlib.h> #include<string.h> #define N 2 #define M 2 struct compete { char num[10]; char name[10]; float score[M]; float aver; int no; }com[N]; void delinfo() { int i,j; char o[10]; char m[10]; printf("请输入需要删除的选手的参赛编号\n"); scanf("%s",&o); for(i=0;i<N;i++) { struct compete temp; //strcpy(temp.num,com[i].num); strcpy(temp.num,o); printf("取值%s",temp.num); printf("对比值%s",com[i].num); if(temp.num==com[i].num) //就是这里的判断 将com[i].num强转成int==o 也无法成立 { printf("进入循环%s",o); break; } } for(j=i;j<M;j++) { printf("执行语句%s",o); strcpy(com[j-1].num,com[j].num); } for(i=0;i<N;i++) com[i].no=i+1; printf("编号\t姓名\t得分\n"); for(i=0;i<N;i++) printf("%s\t%s\t%.2f\n",com[i].num,com[i].name,com[i].aver); return; }
java和c使用socket通信时,发送报文的问题
问题详细描述:java是客户端,c语言是服务端。程序的目的是java发送报文过去 ,服务器能够识别。但是c语言写的服务端是很多年前的,目前已经无法对服务端作任何修改,c接收报文是用char定义的,报文是定长报文,不够的用空格补全,格式为包头+报文长度+报文内容(1字节+4字节+300字节),包头是6,报文长度是0300,报文内容由下图的结构体定义。![图片说明](https://img-ask.csdn.net/upload/201912/23/1577087403_15537.png)java使用getBytes()方法,获取了字节数组,发送过去后服务端报错,报错信息为包头错误,后来发现那边接收的是6对应ASCII码,请问这应该如何解决呢?java测试代码如下 ``` package Demo01; import java.io.BufferedOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class send { public static void main(String[] args) { try { iSend("172.33.xx.xx",10000); } catch (IOException e) { e.printStackTrace(); } } public static void iSend(String IP,int PORT) throws IOException{ String baotou = "6"; String blen= "0300"; String id = "0001"; String sysid = "1111"; String sysname = "disk"; String type = "11"; String level = "1"; String content = "sendcontent"; Socket socket = null; BufferedOutputStream bos = null; String message = "" ; List <Object> messList = new ArrayList(); messList.add(baotou); messList.add(blen); messList.add(id); messList.add(sysid); messList.add(sysname); messList.add(type); messList.add(level); messList.add(content); List <Object> messList2 = new ArrayList(); messList2.add(changeString(messList.get(0).toString(),1)); messList2.add(changeString(messList.get(1).toString(),4)); messList2.add(changeString(messList.get(2).toString(),4)); messList2.add(changeString(messList.get(3).toString(),8)); messList2.add(changeString(messList.get(4).toString(),16)); messList2.add(changeString(messList.get(5).toString(),16)); messList2.add(changeString(messList.get(6).toString(),16)); messList2.add(changeString(messList.get(7).toString(),240)); for(Iterator<Object> it = messList2.iterator();it.hasNext();){ message += it.next(); } System.out.println("报文为:"+message); try { socket = new Socket(IP,PORT); bos = new BufferedOutputStream(socket.getOutputStream()); byte [] buf = message.getBytes(); bos.write(buf,0,buf.length); bos.flush(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ if(socket != null){ socket.close(); } } } /** * *设置定长报文,用空格补齐 * @param object 报文集合 * @param len 报文的规定长度 * @return */ public static String changeString(String list,int len){ for(int ListLen = list.length();ListLen < len;ListLen++){ list +=" "; } return list; } } ```
Linux系统下Qt Creator中使用QProcess调用外部程序没有输出。
如题。 可执行的独立程序如下,是用C语言实现的哲学家就餐问题 ``` #include<stdio.h> #include<stdlib.h> #include<pthread.h> #include<unistd.h> #include<semaphore.h> #define N 3 #define LEFT i #define RIGHT (i+1)%N sem_t mutex[N]; int id[N]={0,1,2}; pthread_t thread[N]; void* solve(void*param){ int i=*((int*)param); while(i>=0){ if(i%2==0){ sem_wait(&mutex[LEFT]); sem_wait(&mutex[RIGHT]); printf("phlio %d is eating\n",i); sleep(1); sem_post(&mutex[RIGHT]); sem_post(&mutex[LEFT]); printf("phlio %d is over\n",i); sleep(1); }else{ sem_wait(&mutex[RIGHT]); sem_wait(&mutex[LEFT]); printf("phlio %d is eating\n",i); sleep(1); sem_post(&mutex[LEFT]); sem_post(&mutex[RIGHT]); printf("phlio %d is over\n",i); sleep(1); } } } int main(){ int i=0; for(i=0; i<N; i++){ sem_init(&mutex[i],0,1); pthread_create(&thread[i],NULL,solve,&id[i]); } for(i=0; i<N; i++){ pthread_join(thread[i],NULL); } return 0; } ``` Qt中使用按钮启动外部C程序,已经尝试过的方法如下(4种方法): ``` //第一种方法: void Dialog::on_pushButton_clicked() { QStringList strList; strList <<"null"<<"null"; QProcess::startDetached("/home/alison/ph1/a.out",strList,"/home/alison/ph1"); } //第二种方法: void MainWindow::on_pushButton_clicked() { QProcess *process=new QProcess; QStringList args; args<<"./a.out"; process->start("/home/alison/ph2/a.out",args); } //第三种方法: void MainWindow::on_pushButton_clicked() { QProcess *process=new QProcess; QStringList str; str <<""; process->start("/home/alison/ph2/a.out"); } //第四种方法: void MainWindow::on_pushButton_clicked() { QProcess *process=new QProcess; QProcess::execute("/home/alison/ph2/a.out"); } ``` Qt程序编译没有错误,但运行之后点击按钮没有相应的C程序运行的结果 希望各位大佬可以帮我解答一下哪里需要修改,十分感谢!
求解根据路径的指令找到对应的用户名,怎么使用C语言的文件的方法的代码去实现程序编写?
Problem Description With a typical operating system, a filesystem consists of a number of directories, in which reside files. These files generally have a canonical location, known as the absolute path (such as /usr/games/bin/kobodl), which can be used to refer to the file no matter where the user is on a system. Most operating system environments allow you to refer to files in other directories without having to be so explicit about their locations, however. This is often stored in a variable called PATH, and is an ordered list of locations (always absolute paths in this problem) to search for a given name. We will call these search paths. In the brand-new crash shell, paths are handled somewhat differently. Users still provide an ordered list of locations that they wish to search for files (their search paths); when a particular filename is requested, however, crash tries to be even more helpful than usual. The process it follows is as follows: If there is an exact match for the filename, it is returned. Exact matches in locations earlier in the list are preferred. (There are no duplicate filenames in a single location.) If there are no exact matches, a filename that has a single extra character is returned. That character may be at any point in the filename, but the order of the non-extra characters must be identical to the requested filename. As before, matches in locations earlier in the list are preferred; if there are multiple matches in the highest-ranked location, all such matches in that location are returned. If there are no exact matches or one-extra-character matches, files that have two extra characters are looked for. The same rules of precedence and multiple matches apply as for the one-extra-character case. If no files meet the three criteria above, no filenames are returned. Two characters is considered the limit of "permissiveness" for the crash shell. So, for example, given the two files bang and tang, they are both one character away from the filename ang and two from ag. (All characters in this problem will be lowercase.) In the sample data below, both cat and rat are one character away from at. Given a complete list of locations and files in those locations on a system, a set of users each with their own ordered lists of search paths, and a set of files that they wish to search for, what filenames would crash return? For the purposes of simplification, all locations will be described by a single alphabetic string, as will filenames and usernames. Real operating system paths often have many components separated by characters such as slashes, but this problem does not. Also note that users may accidentally refer to nonexistent locations in their search paths; these (obviously) contain no files. Input All alphabetic strings in the input will have at least one and at most 20 characters, and will contain no special characters such as slashes or spaces; all letters will be lowercase. Input to this problem will begin with a line containing a single integer N (1 ≤ N ≤ 100) indicating the number of data sets. Each data set consists of the following components: A line containing a single integer F (1 ≤ F ≤ 100) indicating the number of files on the system; A series of F lines representing the files on the system, in the format "location filename", where location and filename are both alphabetic strings; A line containing a single integer U (1 ≤ U ≤ 10) indicating the number of users on the system; A series of U stanzas representing the users. Each stanza consists of the following components: A line containing a single alphabetic string which is the user'susername; A line containing a single integer L (1 ≤ L ≤ 10) representing the number of locations in the user's search path; and A series of L lines containing a single alphabetic string apiece listing the locations in the user's search path. The first one is the highest priority, the second (if present) is the second-highest priority, and so on. A line containing a single integer S (1 ≤ S ≤ 200) indicating the number of file searches to run; A series of S lines representing the searches, in the format "username filename", where username is an alphabetic string that matches one of the users defined in the data set, and filename is an alphabetic string that represents the requested filename. Output For each data set in the input, output the heading "DATA SET #k" where k is 1 for the first data set, 2 for the second, etc. Then for each of the S searches in the data set (and in the same order as read from the input) do the following: Print the line "username REQUESTED filename" where filename is the file requested by username. For each file (if any) that matches this search, print the line "FOUND filename IN location" where filename is the file that matched the user's request and that was found in location. The list of matching files must be sorted in alphabetical order by filename. Sample Input 1 4 food oat food goat animal rat animal cat 2 bob 2 food animal bill 1 animal 4 bob at bob cat bill goat bill at Sample Output DATA SET #1 bob REQUESTED at FOUND oat IN food bob REQUESTED cat FOUND cat IN animal bill REQUESTED goat bill REQUESTED at FOUND cat IN animal FOUND rat IN animal
关于C语言OJ的一道题:Time Limit Exceeded
hihoCoder上的一道关于KMP算法的一道题,题目描述如下: #1015 : KMP算法 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进。 这一天,他们遇到了一只河蟹,于是河蟹就向小Hi和小Ho提出了那个经典的问题:“小Hi和小Ho,你们能不能够判断一段文字(原串)里面是不是存在那么一些……特殊……的文字(模式串)?” 小Hi和小Ho仔细思考了一下,觉得只能想到很简单的做法,但是又觉得既然河蟹先生这么说了,就肯定不会这么容易的让他们回答了,于是他们只能说道:“抱歉,河蟹先生,我们只能想到时间复杂度为(文本长度 * 特殊文字总长度)的方法,即对于每个模式串分开判断,然后依次枚举起始位置并检查是否能够匹配,但是这不是您想要的方法是吧?” 河蟹点了点头,说道:”看来你们的水平还有待提高,这样吧,如果我说只有一个特殊文字,你能不能做到呢?“ 小Ho这时候还有点晕晕乎乎的,但是小Hi很快开口道:”我知道!这就是一个很经典的模式匹配问题!可以使用KMP算法进行求解!“ 河蟹满意的点了点头,对小Hi说道:”既然你知道就好办了,你去把小Ho教会,下周我有重要的任务交给你们!“ ”保证完成任务!”小Hi点头道。 提示一:KMP的思路 提示二:NEXT数组的使用 提示三:如何求解NEXT数组 输入 第一行一个整数N,表示测试数据组数。 接下来的N*2行,每两行表示一个测试数据。在每一个测试数据中,第一行为模式串,由不超过10^4个大写字母组成,第二行为原串,由不超过10^6个大写字母组成。 其中N<=20 输出 对于每一个测试数据,按照它们在输入中出现的顺序输出一行Ans,表示模式串在原串中出现的次数。 样例输入 5 HA HAHAHA WQN WQN ADA ADADADA BABABB BABABABABABABABABB DAD ADDAADAADDAAADAAD 样例输出 3 1 3 1 0 这是我按照自己的理解提交的代码: #include<stdio.h> #include<string.h> #include<stdlib.h> int KMP(char *ori,char *pat); int main(void) { char *ori,strori[10001]; char *pat,strpat[1000001]; int n;//测试组数 pat=strpat;//必须初始化 有所指向才行 ori=strori; scanf("%d\n",&n); while(n--) { scanf("%s",pat); scanf("%s",ori); printf("%d\n",KMP(ori,pat)); } return 0; } int KMP(char *ori,char *pat) { char *temp,*p; int num=strlen(pat); int i=0,j=0; int *next; int sum=0; //求出next数组 next=(int *)malloc(num*sizeof(int)); memset((int *)next,0,num*sizeof(int)); p=temp=pat; pat++; while(*pat) { if(*pat==*temp) { *(next+i+1)=j+1; pat++; temp++; j++; } else { pat++; j=0; } i++; } //匹配字符串 pat=temp=p; i=j=0; while(*ori) { if(*ori!=*pat) { ori++; if(i!=0)//表明之前有匹配成功过,但还未完全匹配 { ori=ori-1-*(next+i-1);//ori=ori-i-1+(i-*(next+i-1)); pat=p; i=0; } } else { ori++; pat++; i++; if(*pat=='\0') { sum++; ori=ori-1-*(next+i-1); pat=p; i=0; } } } return sum; } 但每次提交结果都是: Time Limit Exceeded TLE 用户程序运行时间超过题目的限制 怎么优化一下我的代码才能是它AC啊?!求大神指导啊。
C语言 访问位置冲突 冒泡排序
程序运行到冒泡排序法的地方总是会出现访问冲突 #include<stdafx.h> #include<stdio.h> #include<math.h> #include <conio.h> #include <process.h> #define n 2//学校数目 #define m 2//男子项目数目 #define w 2//女子项目数目 #define null 0 typedef struct { int itemnum; //项目编号 int num; //取名次的数目 int range[5]; //名次 int mark[5]; //分数 }item; //定义项目结点的类型 typedef struct { int schoolnum; //学校编号 int score; //学校总分 int mscore; //男团体总分 int wscore; //女团体总分 item c[m+w]; //项目数组 }school; school h[n]; void inputinformation() //输入信息,建立系统 { int i,j,k,s; for(i=0;i<n;i++) { h[i].score=0; h[i].mscore=0; h[i].wscore=0; } //初始化头结点 for(i=0;i<n;i++) { printf("*****学校编号:"); scanf_s("%d",&h[i].schoolnum); //输入头结点信息 for(j=0;j<m+w;j++) { printf("*****项目编号:"); scanf_s("%d",&h[i].c[j].itemnum); printf("*****取前名or前名:"); scanf_s("%d",&h[i].c[j].num); printf("*****获得几个名次:"); scanf_s("%d",&k); //输入项目信息 for(s=0;s<5;s++) h[i].c[j].range[s]=0, h[i].c[j].mark[s]=0; //初始化排名和分数 for(s=0;s<k;s++) { printf("*****名次:"); scanf_s("%d",&h[i].c[j].range[s]); //输入所获名次信息 if(h[i].c[j].num==3) switch(h[i].c[j].range[s]) { case 0: h[i].c[j].mark[s]=0; break; case 1: h[i].c[j].mark[s]=5; break; case 2: h[i].c[j].mark[s]=3; break; case 3: h[i].c[j].mark[s]=2; break; } else switch(h[i].c[j].range[s]) { case 0: h[i].c[j].mark[s]=0; break; case 1: h[i].c[j].mark[s]=7; break; case 2: h[i].c[j].mark[s]=5; break; case 3: h[i].c[j].mark[s]=3; break; case 4: h[i].c[j].mark[s]=2; break; case 5: h[i].c[j].mark[s]=1; break; } h[i].score=h[i].score+h[i].c[j].mark[s]; //按取前三名还是取前五名分别记分 if(j<=m-1) h[i].mscore=h[i].mscore+h[i].c[j].mark[s]; //是男子项目则记到男子分数里面去 else h[i].wscore=h[i].wscore+h[i].c[j].mark[s]; //是女子项目则记到女子项目里面去 } printf("\n"); } } } void output() //输出函数 { int b; int remember[5]; int i,j,k; int a; do { printf("*******************1.按学校编号输出.*******************\n"); printf("*******************2.按学校总分输出.*******************\n"); printf("*******************3.按男团总分输出.*******************\n"); printf("*******************4.按女团总分输出.*******************\n"); printf("\n\n******************* 请选择编号*************************\n\n:"); scanf_s("%d",&b); switch(b) { case 1: for(i=0;i<n;i++) { printf("\n\n*****学校编号:%d\n",h[i].schoolnum); printf("*****学校总分:%d\n" ,h[i].score); printf("*****男团总分:%d\n",h[i].mscore); printf("*****女团总分: %d\n\n\n",h[i].wscore); } //按编号顺序输出 break; case 2: for(i=0;i<n;i++) remember[i]=i; for(i=0;i<n;i++) { for(j=i+1;j<n;j++) if(h[remember[i]].score<h[j].score) k=remember[i]; remember[i]=remember[j]; remember[j]=k; } // 用冒泡排序方法,用辅助数组记住头结点下标 for(i=0;i<n;i++) { printf("\n\n*****学校编号:%d\n",h[remember[i]].schoolnum); printf("*****学校总分:%d\n" ,h[remember[i]].score); printf("*****男团总分:%d\n",h[remember[i]].mscore); printf("*****女团总分: %d\n\n\n",h[remember[i]].wscore); //按所记下标顺序输出 } //按学校总分输出 break; case 3: for(i=0;i<n;i++) remember[i]=i; for(i=0;i<n;i++) { for(j=i+1;j<n;j++) if(h[remember[i]].score<h[j].score) k=remember[i]; remember[i]=remember[j]; remember[j]=k; } for(i=0;i<n;i++) { printf("\n\n*****学校编号:%d\n",h[remember[i]].schoolnum); printf("*****学校总分:%d\n" ,h[remember[i]].score); printf("*****男团总分:%d\n",h[remember[i]].mscore); printf("*****女团总分: %d\n\n\n",h[remember[i]].wscore); } //按男团总分输出 break; case 4: for(i=0;i<n;i++) remember[i]=i; for(i=0;i<n;i++) { for(j=i+1;j<n;j++) if(h[remember[i]].score<h[j].score) k=remember[i]; remember[i]=remember[j]; remember[j]=k; } for(i=0;i<n;i++) { printf("\n\n*****学校编号:%d\n",h[remember[i]].schoolnum); printf("*****学校总分:%d\n" ,h[remember[i]].score); printf("*****男团总分:%d\n",h[remember[i]].mscore); printf("*****女团总分: %d\n\n\n",h[remember[i]].wscore); } break; //按女团总分输出 } printf("请选择2 继续,0 跳出\n"); scanf_s("%d",&a); }while(a==2); //循环执行输出语句 } void refer() //查询函数 { int a,i,j,k,s; printf("\n*****1:按学校编号查询\n"); printf("\n*****2:按项目编号查询\n"); printf("\n\n*****请选择查询方式:"); //提供两种查询方式 scanf_s("%d",&a); switch(a) { case 1: do { printf("要查询的学校编号:"); scanf_s("%d",&i); if(i>n) printf("错误:这个学校没有参加此次运动会!\n\n\n"); else { printf("要查询的项目编号:"); scanf_s("%d",&j); if(j>m+w||j==0) printf("此次运动会没有这个项目\n\n\n"); //学校编号超出范围,则输出警告 else { printf("这个项目取前%d名,该学校的成绩如下:\n", h[0].c[j-1].num); for(k=0;k<5;k++) if(h[i-1].c[j-1].range[k]!=0) printf("名次:%d\n",h[i-1].c[j-1].range[k]); //输出要查询学校项目的成绩 } } printf("请选择继续, 0 跳出\n"); scanf_s("%d",&s); printf("\n\n\n"); }while(s==2); //循环执行输出语句 break; case 2: do { printf("要查询的项目编号:"); scanf_s("%d",&s); if(s>m+w||s==0) printf("此次运动会不包括这个项目.\n\n\n"); //项目编号超出范围则输出警告 else { printf("该项目取前%d名,取得名次的学校\n",h[0].c[s-1].num); for(i=0; i<n;i++) for(j=0;j<5;j++) if(h[i].c[s-1].range[j]!=0) printf("学校编号:%d,名次:%d\n",h[i].schoolnum, h[i].c[s-1].range[j]); } //输出该项目取得名次学校的成绩 printf("\n\n\n继续,跳出\n"); scanf_s("%d",&i); printf("\n\n\n"); }while(i==2); break; } } int main() { int i; printf("======================欢迎使用======================\n"); printf("\n\n*****************运动会分数统计系统********************\n"); printf("\n\n********************1.输入信息*************************\n"); printf("********************2.输出信息*************************\n"); printf("********************3.查询信息*************************\n"); printf("********************4.退出系统*************************\n"); printf("================================================\n\n"); printf("********请选择要实现步骤的编号:\n\n"); scanf_s("%d",&i); switch(i) { case 1: inputinformation();main(); case 2: output();main(); case 3: refer();main(); case 4: printf("谢谢使用\n"); } return 0; }
The C Programming Language 第二版,第四章原代码编译后无法实现作者的意图,及相关问题
``` 菜鸟一个,刚刚学c,在看The C Programming Language 第二版, 想通过作者提供的例子,更好的理解,结果第四章的例子完全实现不了作者 的意图,找了3个版本的书参考,都没有办法理解,百度也没有答案 1,main函数里面的found 是干吗用的?看着是一个计数器,但是作为return 的 返回值,就没有做其他用了,没见过这种用法,查了资料,返回给系统一个不是0 的值,就是异常?告诉系统这个程序是异常的? 2,作者原意是输入一段字符串,然后程序可以把含有“ould”的行打印出来, 但是这个getline()里面有一个判断,c != '\n',如果换行getline()就终止了, 接着就打印出来了,就无法像作者表述的那样,输入多行,然后筛选出需要的行 3,我想如果真的要实现作者的意图,是不是要改?strindex()筛选出来以后,另外保存,EOF以后再打印,才能够实现作者的想法? 菜鸟一个,多多指教,谢谢各路大神! ```#include <stdio.h> #define MAXLINE 1000 /* maximum input line length */ int getline(char line[], int max) int strindex(char source[], char searchfor[]); char pattern[] = "ould"; /* 需要筛选的行字符串*/ /* 筛选指定字符串 */ main() { char line[MAXLINE]; int found = 0;/*这个是干嘛用的?*/ while (getline(line, MAXLINE) > 0) if (strindex(line, pattern) >= 0) { printf("%s", line); found++; } return found; } /* getline: 输入行,返回长度*/ int getline(char s[], int lim) { int c, i; i = 0; while (--lim > 0 && (c=getchar()) != EOF && c != '\n')/*这里判断有回车 就执行下面的操作了,不可能输入多行,实际测试就是回车就开始打印*/ s[i++] = c; if (c == '\n') s[i++] = c; s[i] = '\0'; return i; } /* strindex: 比较字符串,如果有就返回i,没有就返回没有*/ int strindex(char s[], char t[]) { int i, j, k; for (i = 0; s[i] != '\0'; i++) { for (j=i, k=0; t[k]!='\0' && s[j]==t[k]; j++, k++) ; if (k > 0 && t[k] == '\0') return i; } return -1; } ![图片说明](https://img-ask.csdn.net/upload/201906/30/1561881651_192783.png) 实际效果就是输入一行有指定字符串就打印,没有就不打印 无法实现作者所说的输入多行,打印符合条件的多行 因为是这本书影响太大,所以很重视!谢谢指教!
为什么使用GetStdHandle函数前后不需要打开控制台屏幕缓冲区句柄?
``` #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<stdlib.h> #include <Windows.h> int main(void) { printf("123\n"); HANDLE hOut = NULL; //定义句柄类型的变量并初始化 hOut = GetStdHandle(STD_OUTPUT_HANDLE); //获取标准输出句柄 SetConsoleTextAttribute(hOut,FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE | BACKEGROUND_BLUE);//设置蓝背景、亮青色文本 printf("黑马程序员\n"); SetConsoleTextAttribute(hOut, 10); //设置文本属性为青色 SetConsoleTextAttribute(hOut, 3); //设置文本属性为蓝色 printf("黑马程序员\n"); CloseHandle(hOut); //关闭句柄 printf("123\n"); system("pause"); return 0; } ``` 刚接触windows.h头文件,像上文代码, 1.为什么没有打开控制台屏幕缓冲区的句柄就直接用windows.h的函数进行设置控制台, 2.为什么最后又关闭句柄?没打开句柄,只是获取句柄,且为什么关闭句柄 3.试验了关闭句柄后打printf 无法输出,光标不动。为什么会这样? 4.请问想系统的学习windows.h进行学期末大作业 管理系统project的窗口设置能否推荐下方法,或者视频,在网上找不到具体的解析,也没有相关讨论群。
结构体指针成员变量在赋值后被篡改了是怎么回事?
结构体指针地址没变,值被篡改了什么情况,有没有大神知道啊 // ConsoleApplication1.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "iostream" #include "string.h" using namespace std; struct STU_LIST { char name[40]; int num; char sex[4]; int clas; struct STU_LIST *nex; }; /******************************************************************************************************************/ /*------------------------------------ -----数字提取------------ ---------------------------------------------*/ /******************************************************************************************************************/ int strEint(const char *str) { int len = strlen(str),i,num; char *tepnum,*tep; tepnum = new char[40]; tep=tepnum; i=len-1; *(tepnum+len) = '\0'; while (i>=0) { if (*(str+i)>='0'&&*(str+i)<='9') { *(tepnum+i)=*(str+i); } else { tepnum=tepnum+i+1; i=0; } i--; } num = atoi(tepnum); delete[] tep; return num; } struct STU_LIST *STU_insirt(struct STU_LIST *head,int n); struct STU_LIST *PRESENT_class; /******************************************************************************************************************/ /*------------------------------------ -----主程序------------ -------------------------------------------------*/ /******************************************************************************************************************/ int _tmain(int argc, _TCHAR* argv[]) { char *comad; int lep = -1; bool state = true,create_sign = false; comad = new char; cout<<"欢迎使用学生名单录入工具,请输入命令命令进行操作。\n输入help查询可用命令。"<<endl; PRESENT_class = new struct STU_LIST; PRESENT_class->clas = 10; PRESENT_class->num = 0; PRESENT_class->nex = NULL; while (state) { cin>>comad; int nums; struct STU_LIST *temp; nums = strEint(comad); if (nums <= 0) { cout<<"您的操作命令缺少有效参数或参数类型有误!!!"<<endl; cout<<"您可以输入help来查询可用操作命令,及使用格式和方法。"<<endl; } else { if(PRESENT_class != NULL) { temp = STU_insirt(PRESENT_class,nums); cout<<"temp->nex->"<<static_cast<const void *>(temp->nex)<<endl; cout<<"temp->nex->num->"<<static_cast<const void *>(&temp->nex->num)<<endl; cout<<temp->clas<<"班"<<temp->name<<"的信息记录已添加。"<<endl; if (temp->nex == NULL) { cout<<"本节点是尾结点"<<endl; } else { cout<<"头节点的学号是"<<temp->num<<endl; cout<<"第二个节点的学号是"<<temp->nex->num<<endl; } } else { cout<<"您要往哪个班级添加学生信息,请在添加信息前先选择一个班级的登记表。"<<endl; cout<<"您可以输入help来查询可用操作命令,及使用格式和方法。"<<endl; } } if (strstr(comad,"exit")!=NULL) { state = false; } } return 0; } /******************************************************************************************************************/ /*-----------------------------------------插入学生条目-----------------------------------------------------------*/ /******************************************************************************************************************/ struct STU_LIST *STU_insirt(struct STU_LIST *head,int n) { struct STU_LIST *temp,*stp1,*lastsp; temp = head; lastsp = NULL; bool sign = true; while (sign) { cout<<"当前节点学号是"<<temp->num<<endl; if(temp->num >= n) //假如要插入的学号不大于当前节点学号 { if(temp->num > n ) //假如要插入的学号小于当前节点学号,那么在当前节点前面创建新节点并录入学生数据 { stp1=(struct STU_LIST*) alloca(sizeof(struct STU_LIST)); stp1->num = n; stp1->clas = head->clas; cout<<"请输入学生姓名:"; cin >>stp1->name; cout<<"请输入学生性别:"; cin >>stp1->sex; stp1->nex = temp; if(temp == head ) //假如当前节点是头结点,那么设置新节点为表头 { head = stp1; sign = false; } else //假如当前节点不是头结点,将上一个节点的指针指向新节点,跳出循环结束命令 { lastsp->nex = stp1; sign = false; } } else //假如要插入的学号等于当前节点学号,那么更新该节点学生数据。 { cout<<"请输入学生姓名:"; cin >>temp->name; cout<<"请输入学生性别:"; cin >>temp->sex; sign = false; } } else //假如要插入的学号大于当前节点学号 { cout<<"要插入的节点大于当前节点"<<endl; if(temp->num == 0) //假如当前节点学号等于0,意味着当前节点没有录入过数据,那么将本节点作为插入的节点录入学生数据。 { temp->num = n; cout<<"请输入学生姓名:"; cin >>temp->name; cout<<"请输入学生性别:"; cin >>temp->sex; temp->nex = NULL; sign = false; } else //假如当前节点的学号不等于0。 { if(temp->nex == NULL) //假如当前节点是尾结点,那么在当前节点之后创建新节点 { stp1 = (struct STU_LIST*) alloca(sizeof(struct STU_LIST)); cout<<"stp1 -> "<<static_cast<const void *>(stp1)<<endl; stp1->num = n; cout<<"新节点的学号是"<<stp1->num<<endl; stp1->clas = head->clas; stp1->nex = NULL; cout<<"请输入学生姓名:"; cin >>stp1->name; cout<<"请输入学生性别:"; cin >>stp1->sex; temp->nex = stp1; cout<<"temp->nex->num="<<temp->nex->num<<endl; cout<<"temp->nex->num->"<<static_cast<const void *>(&temp->nex->num)<<endl; sign = false; } else //假如当前节点不是尾结点,那么将当前节点设置为下个节点 { lastsp = temp; temp = temp->nex; } } } } if(head->nex != NULL) { cout<<"head->nex->num="<<head->nex->num<<endl; cout<<"head->nex->num->"<<static_cast<const void *>(&head->nex->num)<<endl; } return head; } ![图片说明](https://img-ask.csdn.net/upload/201912/28/1577541877_870062.png) 在函数内部时候值不变,一出函数内存里的值就变了这是什么道理。
Java编程不知错在那?一位初学着的提问
import java.util.*; //java中的所有系统的类 class Demo8 { public static void main(String[] args) { int s; System.out.println("请输入0到100之间的一个数a"); Scanner sc=new Scanner (System.in); s=sc.nextInt(); //方法的使用。这里有方法的返回类型 方法的名称(方法的参数) static char chengjiDengJi (int s){ /**方法体*/ switch (s/10) { case 10: case 9: return'A'; case 8: case 7: return'B'; case 6: return'C'; case 5: case 4: case 3: case 2: case 1: return'D'; } } } } 运行提示为第十行static中有错误,一直没有理解是怎么错的,求详解。
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。 补充 有不少读者留言说本文章没有用,因为天气预报直接打开手机就可以收到了,为何要多此一举发送到邮箱呢!!!那我在这里只能说:因为你没用,所以你没用!!! 这里主要介绍的是思路,不是天气预报!不是天气预报!!不是天气预报!!!天气预报只是用于举例。请各位不要再刚了!!! 下面是我会用到的两个场景: 每日下
死磕YOLO系列,YOLOv1 的大脑、躯干和手脚
YOLO 是我非常喜欢的目标检测算法,堪称工业级的目标检测,能够达到实时的要求,它帮我解决了许多实际问题。 这就是 YOLO 的目标检测效果。它定位了图像中物体的位置,当然,也能预测物体的类别。 之前我有写博文介绍过它,但是每次重新读它的论文,我都有新的收获,为此我准备写一个系列的文章来详尽分析它。这是第一篇,从它的起始 YOLOv1 讲起。 YOLOv1 的论文地址:https://www.c...
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的回答,对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalking,作者吴晟、刘浩杨 等等 仓库地址: apache/skywalking 更...
20行Python代码爬取王者荣耀全英雄皮肤
引言 王者荣耀大家都玩过吧,没玩过的也应该听说过,作为时下最火的手机MOBA游戏,咳咳,好像跑题了。我们今天的重点是爬取王者荣耀所有英雄的所有皮肤,而且仅仅使用20行Python代码即可完成。 准备工作 爬取皮肤本身并不难,难点在于分析,我们首先得得到皮肤图片的url地址,话不多说,我们马上来到王者荣耀的官网: 我们点击英雄资料,然后随意地选择一位英雄,接着F12打开调试台,找到英雄原皮肤的图片...
简明易理解的@SpringBootApplication注解源码解析(包含面试提问)
欢迎关注文章系列 ,关注我 《提升能力,涨薪可待》 《面试知识,工作可待》 《实战演练,拒绝996》 欢迎关注我博客,原创技术文章第一时间推出 也欢迎关注公 众 号【Ccww笔记】,同时推出 如果此文对你有帮助、喜欢的话,那就点个赞呗,点个关注呗! 《提升能力,涨薪可待篇》- @SpringBootApplication注解源码解析 一、@SpringBootApplication 的作用是什...
西游记团队中如果需要裁掉一个人,会先裁掉谁?
2019年互联网寒冬,大批企业开始裁员,下图是网上流传的一张截图: 裁员不可避免,那如何才能做到不管大环境如何变化,自身不受影响呢? 我们先来看一个有意思的故事,如果西游记取经团队需要裁员一名,会裁掉谁呢,为什么? 西游记团队组成: 1.唐僧 作为团队teamleader,有很坚韧的品性和极高的原则性,不达目的不罢休,遇到任何问题,都没有退缩过,又很得上司支持和赏识(直接得到唐太宗的任命,既给袈...
Python语言高频重点汇总
Python语言高频重点汇总 GitHub面试宝典仓库 回到首页 目录: Python语言高频重点汇总 目录: 1. 函数-传参 2. 元类 3. @staticmethod和@classmethod两个装饰器 4. 类属性和实例属性 5. Python的自省 6. 列表、集合、字典推导式 7. Python中单下划线和双下划线 8. 格式化字符串中的%和format 9. 迭代器和生成器 10...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外
ES6基础-ES6的扩展
进行对字符串扩展,正则扩展,数值扩展,函数扩展,对象扩展,数组扩展。 开发环境准备: 编辑器(VS Code, Atom,Sublime)或者IDE(Webstorm) 浏览器最新的Chrome 字符串的扩展: 模板字符串,部分新的方法,新的unicode表示和遍历方法: 部分新的字符串方法 padStart,padEnd,repeat,startsWith,endsWith,includes 字...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前前言 为啥今天有个前前言呢? 因为你们的丙丙啊,昨天有牌面了哟,直接被微信官方推荐,知乎推荐,也就仅仅是还行吧(心里乐开花)
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
Python爬虫精简步骤1 获取数据
爬虫的工作分为四步: 1.获取数据。爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据。 2.解析数据。爬虫程序会把服务器返回的数据解析成我们能读懂的格式。 3.提取数据。爬虫程序再从中提取出我们需要的数据。 4.储存数据。爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析。 这一篇的内容就是:获取数据。 首先,我们将会利用一个强大的库——requests来获取数据。 在电脑上安装
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 更多有趣分析教程,扫描下方二维码关注vx公号「裸睡的猪」 即可查看! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布
web前端javascript+jquery知识点总结
Javascript javascript 在前端网页中占有非常重要的地位,可以用于验证表单,制作特效等功能,它是一种描述语言,也是一种基于对象(Object)和事件驱动并具有安全性的脚本语言 ,语法同java类似,是一种解释性语言,边执行边解释。 JavaScript的组成: ECMAScipt 用于描述: 语法,变量和数据类型,运算符,逻辑控制语句,关键字保留字,对象。 浏览器对象模型(Br
Qt实践录:开篇
本系列文章介绍笔者的Qt实践之路。
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。   再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。   下文是原回答,希望能对你能有所启发。   如果我说,这个世界上人真的分三六九等,
为什么听过很多道理,依然过不好这一生?
记录学习笔记是一个重要的习惯,不希望学习过的东西成为过眼云烟。做总结的同时也是一次复盘思考的过程。 本文是根据阅读得到 App上《万维钢·精英日课》部分文章后所做的一点笔记和思考。学习是一个系统的过程,思维模型的建立需要相对完整的学习和思考过程。以下观点是在碎片化阅读后总结的一点心得总结。
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计
一条链接即可让黑客跟踪你的位置! | Seeker工具使用
搬运自:冰崖的部落阁(icecliffsnet) 严正声明:本文仅限于技术讨论,严禁用于其他用途。 请遵守相对应法律规则,禁止用作违法途径,出事后果自负! 上次写的防社工文章里边提到的gps定位信息(如何防止自己被社工或人肉) 除了主动收集他人位置信息以外,我们还可以进行被动收集 (没有技术含量) Seeker作为一款高精度地理位置跟踪工具,同时也是社交工程学(社会工程学)爱好者...
作为程序员的我,大学四年一直自学,全靠这些实用工具和学习网站!
我本人因为高中沉迷于爱情,导致学业荒废,后来高考,毫无疑问进入了一所普普通通的大学,实在惭愧...... 我又是那么好强,现在学历不行,没办法改变的事情了,所以,进入大学开始,我就下定决心,一定要让自己掌握更多的技能,尤其选择了计算机这个行业,一定要多学习技术。 在进入大学学习不久后,我就认清了一个现实:我这个大学的整体教学质量和学习风气,真的一言难尽,懂的人自然知道怎么回事? 怎么办?我该如何更好的提升
前端JS初级面试题二 (。•ˇ‸ˇ•。)老铁们!快来瞧瞧自己都会了么
1. 传统事件绑定和符合W3C标准的事件绑定有什么区别? 传统事件绑定 &lt;div onclick=""&gt;123&lt;/div&gt; div1.onclick = function(){}; &lt;button onmouseover=""&gt;&lt;/button&gt; 注意: 如果给同一个元素绑定了两次或多次相同类型的事件,那么后面的绑定会覆盖前面的绑定 (不支持DOM事...
相关热词 c# 数组类型 泛型约束 c#的赛狗日程序 c# 传递数组 可变参数 c# 生成存储过程 c# list 补集 c#获得所有窗体 c# 当前秒数转成年月日 c#中的枚举 c# 计算校验和 连续随机数不重复c#
立即提问