宏定义的小问题,为什么输出是D

最后一行s[++i],不应该是s【1】吗,应该输出B,为什么会输出D呢

#include<stdio.h>
#include<stdlib.h>
#define TOUPPER(c) ('a'<=(c)&&(c)<='z'?(c)-'a'+'A':(c))

void main()
{
char s[5];
strcpy(s, "abcd");
int i = 0;
putchar(TOUPPER(s[++i]));
} 

1个回答

这个道理很简单,因为宏只是机械的文本替换,每次遇到c都会替换成s[++i]
而你的表达式出现了好几次c,所以最后相当于
putchar(('a'<=(s[++i])&&(s[++i])<='z'?(s[++i])-'a'+'A':(s[++i])));

#include<stdio.h>
#include<stdlib.h>
#define TOUPPER(c) ('a'<=(c)&&(c)<='z'?(c)-'a'+'A':(c))

int main()
{
char s[5];
strcpy(s, "abcd");
int i = 0;
char ch = s[++i];
putchar(TOUPPER(ch));
} 

这样就是b

no_russion
no_russion 原来是这样 谢谢了
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
新人c语言宏定义的一点小问题
#include <stdio.h> #define p(x) printf("%d",&x); int main(int argc, char** argv) { int c=18; p(c) return 0; } 为什么输出6487628?
C语言的宏定义只能是定义一串数字吗?
```#define PI 1233 main() { int a=PI-3; printf ("%d",a); ``` 如上,第一行的PI右边是一串数,虽然也是字符,那为什么主函数里计算时PI是等于数字1233而不是一串字符“1233”呢? 再,第一行PI右边可以是定义其他字符吗?如“abcd”?如果可以,那接下来怎么输出这串字符即PI呢? (刚学C语言的大一菜鸡,多有不懂,问题可能问得不太恰当,望见谅)
新人c语言宏定义的一点问题
#include <stdio.h> #define p(x) printf("%d",&x); int main(int argc, char** argv) { int c=18; p(c) return 0; } 为什么输出6487628?
请教大家一个Linux内核中的C语言宏定义问题
在Linux内核中,有一个名为cpumask_t的数据结构,与该结构相关的定义如下: ``` 1 /*代码位置:include/linux/cpumask.h*/ 2 typedef struct { DECLARE_BITMAP(bits, NR_CPUS); } cpumask_t; 3 4 /*代码位置:include/linux/types.h*/ 5 #define DECLARE_BITMAP(name,bits) \ 6 unsigned long name[BITS_TO_LONGS(bits)] 7 8 /*代码位置:include/linux/bitops.h*/ 9 #define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_LONG) 10 11 /*代码位置:include/linux/kernel.h*/ 12 #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) 13 14 /*代码位置:include/asm-x86/types.h*/ 15 #ifdef CONFIG_X86_32 16 # define BITS_PER_LONG 32 17 #else 18 # define BITS_PER_LONG 64 19 #endif ``` 其中,NR_CPUS是一个常量。上面这些,在下都能看懂,转化为C语言伪代码就是 ``` unsigned long size = (NR_CPUS+31)/32; typedef struct{unsigned long bits[size];} cpumask_t; ``` 这里BITS_PER_LONG取32,(NR_CPUS+31)/32就是对(NR_CPUS/32)上取整。 问题是,下面这个宏在下就看不懂了 ``` #define CPU_MASK_NONE \ (cpumask_t) { { \ [0 ... BITS_TO_LONGS(NR_CPUS)-1] = 0UL \ } } ``` 在下想请教各位大神,上面宏定义中的三个点"..."是什么意思啊?整个宏定义是什么意思? 为了向大家更清楚地说明问题,下面是内核代码中用CPU_MASK_NONE初始化cpumask_t的一个例子 ``` cpumask_t populated = CPU_MASK_NONE; ``` 希望各位大神不吝赐教,在下先行谢过!
#if !defined宏定义,这个不是为了防止重复包含的吗?
vs2008中,复制相同的cpp,其中包含了#if !defined宏定义,这个不是为了防止重复包含的吗?为什么加上这个,程序会出现错误 #if !defined(AFX_NLCVIEWGPSINFODLGJP_H__A976BB54_99AA_4EB2_841B_23AF1D3FF9A7__INCLUDED_) #define AFX_NLCVIEWGPSINFODLGJP_H__A976BB54_99AA_4EB2_841B_23AF1D3FF9A7__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #endif // !defined(AFX_NLCVIEWGPSINFODLGJP_H__A976BB54_99AA_4EB2_841B_23AF1D3FF9A7__INCLUDED_)
关于 DirectX 出现宏重定义的问题
以下是代码 ``` #pragma once #pragma comment(lib, "dxgi.lib") #pragma comment(lib, "d3d11.lib") #pragma comment(lib, "d3dx11.lib") #pragma comment(lib, "d3dx10.lib") #include <dxgi.h> #include <d3dcommon.h> #include <d3d11.h> #include <d3dx10math.h> class D3DClass { public: D3DClass(); D3DClass(const D3DClass&); ~D3DClass(); bool Initiazlize(int screenWidth, int screenHeight, bool vsync, HWND hwnd, bool fullscreen, float screenDepth,int screenNear); void Showdown(); void BeginScene(float red, float green, float blue, float alpha); void EndScene(); ID3D11Device* GetDevice(); ID3D11DeviceContext* GetDeviceContext(); void GetProjectionMatrix(D3DXMATRIX& projectionMatrix); void GetWorldMatrix(D3DXMATRIX& worldMatrix); void GetOrthoMatrix(D3DXMATRIX& orthoMarix); void GetVideoCardInfo(char* carName, int& memory); private: bool m_vsync_enabled; //是否垂直同步 int m_videoCardMemory; //显存大小 char m_videoCardDescription[128]; //显卡名称 IDXGISwapChain* m_swapChain; //交换链对象 ID3D11Device* m_device; //设备对象 ID3D11DeviceContext* m_deviceContext; //设备上下文对象 ID3D11RenderTargetView* m_renderTargetView; //渲染目标视图 ID3D11Texture2D* m_depthStencilBuffer; //深度模板缓冲 ID3D11DepthStencilState* m_depthStencilState; //深度模板状态 ID3D11DepthStencilView* m_depthStencilState; //深度目标状态 ID3D11RasterizerState* m_rasterizerState; //渲染状态 D3DXMATRIX m_projectionMatrix; //投影矩阵 D3DXMATRIX m_wordMatrix; //世界坐标系矩阵 D3DXMATRIX m_orthoMatrix; //正交投影矩阵 }; ``` 这是警告 ![图片说明](https://img-ask.csdn.net/upload/201602/11/1455170004_653386.png) 错误: ![图片说明](https://img-ask.csdn.net/upload/201602/11/1455170036_922762.png) 系统是win10,用vs2013写的,SDK是DXSDK_Jun10,代码是在[](http://www.it165.net/pro/html/201203/1911.html "")学的,希望各位大神不吝赐教,小弟在此谢过了
C++宏定义字符串时出错
在用xcode写cocos2d的程序时,遇到一个问题,当调试环境是mac时,需要的文件路径为绝对路径,调试环境是iphone时,文件路径直接是文件名就可以了。为了解决这个问题,尝试写了一下宏。如下: #define RUN_IN_IOS #define TO_STRING(_string) #_string #ifdef RUN_IN_IOS #define GET_FILE(_fileName) TO_STRING(_fileName) #else #define GET_FILE(_fileName) TO_STRING(/Users/aaa/Resource/##_fileName) #endif 调用的方式为: string ttfPath = GET_FILE(Marker.ttf); 结果报错为: Pasting formed '/Marker', an invalid preprocessing token 查询之后发现可能是clang编译的问题,但是我不太懂这个。 请教各位如果不使用这种写法,该怎么写达到我预计的效果? 谢谢各位!
新手求教#if !defined宏标识符的问题
#if !defined(AFX_LOKDJI_H__20195F81_ABS6_13D2_11D9_4890C8E1458B__INCLUDED_) 这个语句中的“AFX_LOKDJI_H__20195F81_ABS6_13D2_11D9_4890C8E1458B__INCLUDED_” 1,这个标识符是自动生成的还是手动自定义的? 2,如果是自动生成的应该怎么实现?
webkit编译问题-宏未定义
请问一下定义的宏是在哪些头文件中定义的,麻烦指点一下,谢谢! 正在对“F:\WebKit-r154716\WebKitBuild\Debug\obj32\libGLESv2\libGLESv2.unsuccessfulbuild”执行 Touch 任务。 ClCompile: ProgramBinary.cpp ..\src\libGLESv2\ProgramBinary.cpp(128): warning C4245: “return”: 从“int”转换到“GLuint”,有符号/无符号不匹配 ..\src\libGLESv2\ProgramBinary.cpp(1635): error C2065: “D3DCOMPILE_OPTIMIZATION_LEVEL3”: 未声明的标识符 ..\src\libGLESv2\ProgramBinary.cpp(1793): error C2065: “D3DCOMPILE_OPTIMIZATION_LEVEL3”: 未声明的标识符 Renderer.cpp ..\src\libGLESv2\renderer\Renderer.cpp(84): error C2065: “D3DCOMPILE_DEBUG”: 未声明的标识符 ..\src\libGLESv2\renderer\Renderer.cpp(89): error C2065: “D3DCOMPILE_SKIP_OPTIMIZATION”: 未声明的标识符 ..\src\libGLESv2\renderer\Renderer.cpp(107): error C2065: “D3DCOMPILE_AVOID_FLOW_CONTROL”: 未声明的标识符 ..\src\libGLESv2\renderer\Renderer.cpp(109): error C2065: “D3DCOMPILE_PREFER_FLOW_CONTROL”: 未声明的标识符 Renderer11.cpp ..\src\libGLESv2\renderer\Renderer11.cpp(836): error C2065: “D3D_PRIMITIVE_TOPOLOGY_UNDEFINED”: 未声明的标识符 ..\src\libGLESv2\renderer\Renderer11.cpp(841): error C2065: “D3D_PRIMITIVE_TOPOLOGY_LINELIST”: 未声明的标识符 ..\src\libGLESv2\renderer\Renderer11.cpp(842): error C2065: “D3D_PRIMITIVE_TOPOLOGY_LINESTRIP”: 未声明的标识符 ..\src\libGLESv2\renderer\Renderer11.cpp(843): error C2065: “D3D_PRIMITIVE_TOPOLOGY_LINESTRIP”: 未声明的标识符 ..\src\libGLESv2\renderer\Renderer11.cpp(844): error C2065: “D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST”: 未声明的标识符 ..\src\libGLESv2\renderer\Renderer11.cpp(845): error C2065: “D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP”: 未声明的标识符 ..\src\libGLESv2\renderer\Renderer11.cpp(847): error C2065: “D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST”: 未声明的标识符 ..\src\libGLESv2\renderer\Renderer11.cpp(1756): error C2065: “D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP”: 未声明的标识符 ..\src\libGLESv2\renderer\Renderer11.cpp(2648): error C2065: “D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP”: 未声明的标识符 ..\src\libGLESv2\renderer\Renderer11.cpp(2823): error C2065: “D3DCOMPILE_OPTIMIZATION_LEVEL0”: 未声明的标识符 Renderer9.cpp ..\src\libGLESv2\renderer\Renderer9.cpp(3105): error C2065: “D3DCOMPILE_OPTIMIZATION_LEVEL3”: 未声明的标识符 SwapChain11.cpp ..\src\libGLESv2\renderer\SwapChain11.cpp(646): error C2065: “D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP”: 未声明的标识符 正在生成代码... 生成失败。
求教大佬,这段代码为什么在codeblocks下宏定义为1时正常运行,不为1时运行停止
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h> #define NO 'F' #define YES 'P' #define PASSLINE 320 #define PASSLINE1 75 #define PASSLINE2 45 #define N 1 int npass=0; struct Stu_Score { int number; char name[20]; double Eng_score; double mat_score; double maj_score; double pol_score; double sum_score; char state; }stu[N]; void Cal_Mark(int i) { stu[i].sum_score=stu[i].mat_score+stu[i].Eng_score+ stu[i].pol_score+stu[i].maj_score; if(stu[i].sum_score>=PASSLINE && stu[i].mat_score>=PASSLINE1 && stu[i].maj_score>=PASSLINE1 && stu[i].Eng_score>=PASSLINE2 && stu[i].pol_score>=PASSLINE2) { stu[i].state=YES; stu[i].state=YES; npass++; } else stu[i].state=NO; } void exchange(struct Stu_Score *p,struct Stu_Score *q) { struct Stu_Score *temp; temp->number=p->number; strcpy(temp->name,p->name); temp->Eng_score=p->Eng_score; temp->mat_score=p->mat_score; temp->maj_score=p->maj_score; temp->pol_score=p->pol_score; temp->sum_score=p->sum_score; temp->state=p->state; mp->state=p->state; p->number=q->number; strcpy(p->name,q->name); p->Eng_score=q->Eng_score; p->mat_score=q->mat_score; p->maj_score=q->maj_score; p->pol_score=q->pol_score; p->sum_score=q->sum_score; p->state=q->state; q->number=temp->number; strcpy(q->name,temp->name); q->Eng_score=temp->Eng_score; q->mat_score=temp->mat_score; q->maj_score=temp->maj_score; q->pol_score=temp->pol_score; q->sum_score=temp->sum_score; q->state=temp->state; printf("0000000"); printf("0000000"); } void SelectionSort(struct Stu_Score stu[]) { int i,j,k; for(i=0;i<N-1;i++) { k=i; for(j=i+1;j<N;j++) if(stu[j].sum_score>stu[i].sum_score) k=j; if(k!=i) exchange(&stu[i],&stu[k]); } } int main() { int i; int i; for(i=0;i<N;i++) { system("cls"); printf("请输入NO.%d学生的信息:\n",i+1); printf("学号:"); scanf("%d",&stu[i].number); printf("姓名:"); scanf("%s",stu[i].name); printf("数学成绩:"); scanf("%lf",&stu[i].mat_score); printf("英语成绩:"); scanf("%lf",&stu[i].Eng_score); printf("政治成绩:"); scanf("%lf",&stu[i].pol_score); printf("专业课成绩:"); scanf("%lf",&stu[i].maj_score); scanf("%lf",&stu[i].maj_score); } for(i=0;i<N;i++) Cal_Mark(i); SelectionSort(stu); system("cls"); if(npass) { printf("满足要求的学生的复试名单为:\n"); printf("学号\t姓名\t外语\t数学\t政治\t专业课\t总成绩\n"); for(i=0;i<N;i++) if(stu[i].state==YES) { if(stu[i].number/10==0) printf("00%d\t",stu[i].number); else if(stu[i].number/100==0) else if(stu[i].number/100==0) printf("0%d\t",stu[i].number); else printf("%d\t",stu[i].number); printf("%s\t%g\t%g\t%g\t%g\t%g\n",stu[i].name, stu[i].Eng_score,stu[i].mat_score, stu[i].pol_score,stu[i].maj_score, stu[i].sum_score); } } else printf("没有满足要求的学生!"); return 0; }
为什么宏定义错误请帮我指出来,感激不尽
#include <stdio.h> #include <stdlib.h> #define N 10 void Input(int[], int); void Output(int[], int); void Sc(int[], int); int main() { int a[N]; void Input(a , N); void Sc(a, N); void Output(a, N); return 0; } void Input(int a[], int n) { int i for(i = 0; i < n; i++) { scanf("%d", &a[i]); } } void Sc(int a[], int n) { int m; for(m = 0; m < n; m++) { a[m] = 0; } } void Output(int a[], int n) { int b; for(b = 0; b < n; b++) { printf("%d ", a[b]); } }
急!!请教下c++double转换为int的问题
今天在计算数据的时候,我用c++算数的时候出现了点问题,如下图,就是double 类型的d取值为1,然后N为整型20,densityC为宏定义的0.5, 结果算出来1.0\*20\*0.5得出数值为9???这计算机不拿我当人呢,请问大佬们这个怎么解决 ![图片说明](https://img-ask.csdn.net/upload/201911/16/1573894724_617178.png) ![图片说明](https://img-ask.csdn.net/upload/201911/16/1573894734_756553.png)
c++为什么在宏定义大于4万以后就会出错?
1.问题:素数筛法,在数组大小为40w时报错,显示发生了未经处理的win32异常。 关闭vs2015的调试-实时里面的选项后就是.exe已停止工作。 2.代码 ``` #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<string> #include<set> #include<list> #include<vector> #include<map> #include<stack> #include<iterator> #include<algorithm> #include<iostream> using namespace std; #define F(i,m,n) for(int i=m;i<n;i++) #define max 400007//40007没问题 int prime[max];//保存筛得的素数 bool mark[max];//标记该数是否已被标记为非素数 true表示非素数 int primesize; //素数筛法 void init() { F(i, 0, max) //初始化 { mark[i] = false; } memset(prime,0,sizeof(prime)); primesize = 0; F(j,2,max) { if (mark[j])continue; //已标记为非素数,跳过 prime[primesize++] = j;//保存素数 for (int k = j*j;k < max;k+=j)//标记素数所有倍数为非素数 { mark[k] = true; } } } //主函数 int main() { init(); int n; bool output = false; scanf("%d",&n); F(i,0,max) { if (prime[i] < n&&prime[i]!=0) { if(output) { printf(" %d",prime[i]);//输出空格 } else { printf("%d",prime[i]); output = true; } } else break; } printf("\n"); return 0; } ``` 3.大佬的类似代码-北邮2018研究生复试题 ``` #include<bits/stdc++.h> using namespace std; typedef long long ll; #define maxn 400007//最大遍历到40w 就能找到第1w多个发财数 int vis[maxn],p[maxn]; ll fa[maxn]; void init(int n)//线性筛 { int pos=0; memset(vis,0,sizeof(vis)); int i,j; for(i=2;i<n;i++) { if(!vis[i]) p[pos++]=i; for(j=0;j<pos&&i*p[j]<n;j++) { vis[i*p[j]]=1; if(i%p[j]==0) break; } } } int main() { init(maxn); int t,n,i,k,j,q; vector <int> v; for(k=2;k<400000;k++)//遍历到40w { if(!vis[k]) continue;//是素数则直接跳过 int kt=k; int anssize=0; int ansprime[30]; int ansnum[30]; for(i=0;i<1000;i++)//用前1000个素数来测试 { //这个40w和1000,无脑试了很多次才确定这个范围,各位大佬有什么简便方法请指教 if(kt%p[i]==0)//素数分解,可以参考王道第四章的分解素因数 { ansprime[anssize]=p[i]; ansnum[anssize]=0; while(kt%p[i]==0) { ansnum[anssize]++; kt/=p[i]; } anssize++; if(kt==1) break; } } int su=0; for(i=0;i<anssize;i++) { su+=ansnum[i]; } if(su>=8)//是发财数就存起来 { v.push_back(k); } } int vs=v.size(); cin>>t; while(t--) { cin>>n; cout<<v[n-1]<<endl; } return 0; } ```
C语言在宏定义中声明三目运算符#define A(a,b) (a>b)?a:b的运算问题,环境为codeblocks_10.05
#include <stdio.h> #define A(a,b) (a>b)?a:b int main() { printf("%d",A(8,2)*5);//结果为8 return 0; } /* #include <stdio.h> #define A(a,b) ((a>b)?a:b) int main() { printf("%d",A(8,2)*5);//结果为40 return 0; }*/
C语言 应该怎么修改宏定义 在函数5执行之后,打印错误error 函数6也能执行
这是函数5 static char * test_replace() { Link_t head; head = LinkTable_new(); Link_t temp3 =Link_replace(head, "101", "cpp101"); int number4; if(temp3 != NULL) { number4 =2; } else { number4 =0; } if(number4 == 1) { passed++; } else { failed++; } tcut_assert("error, number4 != 1", number4 == 1); return 0; } 这是函数6 static char * test_remove() { Link_t head; head = LinkTable_new(); Link_t temp = Link_remove(head, "102"); Link_t temp2 = Link_remove(head, "102"); int number5; if(temp2 == NULL) { number5=1; } if(head == temp) { LinkTable_free(head); } else { free(temp); LinkTable_free(head); } if(number5 == 1) { passed++; } else { failed++; } tcut_assert("error, number5 != 1", number5 == 1); return 0; } static char * all_tests() { tcut_run_test(test_replace); tcut_run_test(test_remove); return 0; } int main(int argc, char **argv) { printf("\n----------- Begin Unit Test ----------\n"); Test_LinkTable( ); char *result = all_tests(); printf("Tests run: %d\n", nr_tests); if (result != 0) { printf("%s\n", result); printf("Error:The test doesn't pass normal"); } else { printf("ALL TESTS PASSED\n"); } printf("\n------------End Unit Test -------------\n"); printf("Passed: %d 个 \n",passed); printf("Failed: %d 个 \n",failed); printf("\n----------------------------------------\n"); return result != 0; } 宏定义 :#define tcut_assert(what, test) do { if (!(test)) return what;} while (0) #define tcut_run_test(test) do { char *what = test(); nr_tests++; if (what) return what; } while (0) 应该怎么改宏定义 让函数5不执行 函数 6可以执行
win8.1+vs2012 d3d11生成的时候出现大量宏重定义
![图片说明](https://img-ask.csdn.net/upload/201507/23/1437634830_696818.jpg) 如图, 网上有解决办法说是把vc++包含目录中的$(WindowsSDK_IncludePath) 放在 $(DXSDK_DIR)Include 之前, 但是我这么做不仅没有解决, 还在引入SDK Sample中的"d3dx11Effect.h"之后引入了新的错误: ![图片说明](https://img-ask.csdn.net/upload/201507/23/1437635597_770760.jpg) 请大神指教这个问题究竟如何解决, 谢谢! include: ![图片说明](https://img-ask.csdn.net/upload/201507/23/1437637138_481188.jpg) Common里面是用vs2012重新编译过的Effects库
新手请教一下c语言变量定义的问题
我的工程里有3个.cpp和2个.h,在cpp文件里定义了几个全局变量,然后两个cpp里都引用了一个.h,结果build的时候就出现 already defined in ***.obj, conflicts with use of other libs, one or more multiply defined symbols found 报错信息如下 Main.obj : error LNK2005: "int (* iMap)[13]" (?iMap@@3PAY0N@HA) already defined in LessonX.obj Main.obj : error LNK2005: "bool g_bStart" (?g_bStart@@3_NA) already defined in LessonX.obj Main.obj : error LNK2005: "float g_fGameTime" (?g_fGameTime@@3MA) already defined in LessonX.obj Main.obj : error LNK2005: "int g_iScore" (?g_iScore@@3HA) already defined in LessonX.obj LINK : warning LNK4098: defaultlib "LIBC" conflicts with use of other libs; use /NODEFAULTLIB:library ..\..\..\Bin\Game.exe : fatal error LNK1169: one or more multiply defined symbols found 执行 link.exe 时出错. LessonX.cpp的源代码如下: ///////////////////////////////////////////////////////////////////////////////// // // // // ///////////////////////////////////////////////////////////////////////////////// #include <Stdio.h> #include "CommonAPI.h" #include "LessonX.h" #include "List.h" //////////////////////////////////////////////////////////////////////////////// // int g_iGameState = 0; // 游戏状态,0 -- 游戏结束等待开始状态;1 -- 按下空格键开始,初始化游戏;2 -- 游戏进行中 struct Weapon* g_pMyTank =NULL; int iMap[11][13]; bool g_bStart = false; // 控制一局游戏开始true与结束false float g_fGameTime = 0.f; // 一局游戏的剩余时间 int g_iScore = 0; // 一局游戏得分 const float GAME_TIME = 30.f; // 一局游戏时间 const float CREATE_TANK_TIME = 5.f; // 每批次生成坦克的时间间隔 const float TANK_SPEED = 5.f; // 坦克速度 const float BULLET_SPEED = 8.f; // 子弹速度 const float FIRE_TIME = 2.f; // 坦克开炮时间间隔 const float WORLD_LEFT = -26.f; // 游戏场景边界左值 const float WORLD_TOP = -22.f; // 游戏场景边界左值 const float WORLD_RIGHT = 26.f; // 游戏场景边界左值 const float WORLD_BOTTOM = 22.f; // 游戏场景边界左值// // 游戏地图,0表示此处为空,1表示此处有墙。根据游戏空间大小、墙以及坦克大小, // 我们把地图分成11行,13列,每格大小刚好放一块墙。 // void GameInit(); void GameRun( float fDeltaTime ); void GameEnd(); void MoveMyTank(int iKey,bool bPress); //============================================================================== // // 大体的程序流程为:GameMainLoop函数为主循环函数,在引擎每帧刷新屏幕图像之后,都会被调用一次。 //============================================================================== // // 游戏主循环,此函数将被不停的调用,引擎每刷新一次屏幕,此函数即被调用一次 // 用以处理游戏的开始、进行中、结束等各种状态. // 函数参数fDeltaTime : 上次调用本函数到此次调用本函数的时间间隔,单位:秒 void GameMainLoop( float fDeltaTime ) { switch( g_iGameState ) { // 初始化游戏,清空上一局相关数据 case 1: { GameInit(); g_iGameState = 2; // 初始化之后,将游戏状态设置为进行中 } break; // 游戏进行中,处理各种游戏逻辑 case 2: { // TODO 修改此处游戏循环条件,完成正确游戏逻辑 if( true ) { GameRun( fDeltaTime ); } else { // 游戏结束。调用游戏结算函数,并把游戏状态修改为结束状态 g_iGameState = 0; GameEnd(); } } break; // 游戏结束/等待按空格键开始 case 0: default: break; }; } void MoveMyTank(int iKey,bool bPress) { if(bPress&&g_pMyTank!=NULL) { switch(iKey) { case KEY_W: g_pMyTank->iDir=UP; g_pMyTank->fSpeedX=0.f; g_pMyTank->fSpeedY=-TANK_SPEED; break; case KEY_S: g_pMyTank->iDir=DOWN; g_pMyTank->fSpeedX=0.f; g_pMyTank->fSpeedY=TANK_SPEED; break; case KEY_A: g_pMyTank->iDir=LEFT; g_pMyTank->fSpeedX=-TANK_SPEED; g_pMyTank->fSpeedY=0.f; break; case KEY_D: g_pMyTank->iDir=RIGHT; g_pMyTank->fSpeedX=TANK_SPEED; g_pMyTank->fSpeedY=0.f; break; default: break; } dSetSpriteLinearVelocity("player",g_pMyTank->fSpeedX, g_pMyTank->fSpeedY); dSetSpriteRotation("player",g_pMyTank->iDir*90); } } //============================================================================== // // 每局开始前进行初始化,清空上一局相关数据 void GameInit() { } //============================================================================== // // 每局游戏进行中 void GameRun( float fDeltaTime ) { } //============================================================================== // // 本局游戏结束 void GameEnd() { } //========================================================================== // // 鼠标移动 // 参数 fMouseX, fMouseY:为鼠标当前坐标 void OnMouseMove( const float fMouseX, const float fMouseY ) { } //========================================================================== // // 鼠标点击 // 参数 iMouseType:鼠标按键值,见 enum MouseTypes 定义 // 参数 fMouseX, fMouseY:为鼠标当前坐标 void OnMouseClick( const int iMouseType, const float fMouseX, const float fMouseY ) { } //========================================================================== // // 鼠标弹起 // 参数 iMouseType:鼠标按键值,见 enum MouseTypes 定义 // 参数 fMouseX, fMouseY:为鼠标当前坐标 void OnMouseUp( const int iMouseType, const float fMouseX, const float fMouseY ) { } //========================================================================== // // 键盘按下 // 参数 iKey:被按下的键,值见 enum KeyCodes 宏定义 // 参数 iAltPress, iShiftPress,iCtrlPress:键盘上的功能键Alt,Ctrl,Shift当前是否也处于按下状态(0未按下,1按下) void OnKeyDown( const int iKey, const bool bAltPress, const bool bShiftPress, const bool bCtrlPress ) { if(iKey == KEY_SPACE && g_bStart == false) // 游戏未开始,按下空格键 { g_bStart = true; g_fGameTime = GAME_TIME; dSetSpriteVisible("start", false); dSetTextValue("time", (int)g_fGameTime); dSetTextValue("score", g_iScore); } } //========================================================================== // // 键盘弹起 // 参数 iKey:弹起的键,值见 enum KeyCodes 宏定义 void OnKeyUp( const int iKey ) { } //=========================================================================== // // 精灵与精灵碰撞 // 参数 szSrcName:发起碰撞的精灵名字 // 参数 szTarName:被碰撞的精灵名字 void OnSpriteColSprite( const char *szSrcName, const char *szTarName ) { } //=========================================================================== // // 精灵与世界边界碰撞 // 参数 szName:碰撞到边界的精灵名字 // 参数 iColSide:碰撞到的边界 0 左边,1 右边,2 上边,3 下边 void OnSpriteColWorldLimit( const char *szName, const int iColSide ) { } List.h的源代码如下: ////////////////////////////////////////////////////////////// /////////////////////////// ////// // //////////////////////////// #ifndef _LIST_H_ #define _LIST_H_ ///////////////////////////// struct Weapon{ char szName[128]; // 精灵名称 float fPosX, fPosY; // 精灵坐标 float fSpeedX, fSpeedY; // X和Y方向上速度 float fFireTime; // 敌方坦克距下一次开炮的剩余时间 int iHp; // 生命值 int iDir; // 朝向:0 - 上方;1 - 右方;2 - 下方;3 - 左方 int iType; // 类型: 0 - 我方坦克;1 - 敌方坦克;2 - 我方 // 子弹; 3 - 敌方子弹 Weapon* pNext; // 指向下一个节点的指针 }; enum Direction{ UP = 0, // 上方 RIGHT = 1, // 右方 DOWN = 2, // 下方 LEFT = 3 // 左方 }; enum Role { MYTANK = 0, // 我方坦克 ENEMYTANK = 1, // 敌方坦克 MYBULLET = 2, // 我方子弹 ENEMYBULLET = 3 // 敌方子弹 }; extern int g_iGameState; // 游戏状态,0 -- 游戏结束等待开始状态;1 -- 按下空格键开始,初始化游戏;2 -- 游戏进行中 extern struct Weapon* g_pMyTank; extern int iMap[11][13]; extern bool g_bStart; // 控制一局游戏开始true与结束false extern float g_fGameTime; // 一局游戏的剩余时间 extern int g_iScore; // 一局游戏得分 #endif//_LIST_H_ 求问这要怎么办?
如何解决在定义UNICODE(_UNICODE)宏后无法编译Windows窗口应用程序?
我将创建窗口的代码封装成一个SimpleWindow类,放在SimpleWindow.h和SimpleWindow.cpp文件中,然后在main.cpp中写了如下一段测试SimpleWindow类的代码,然后用VS2010命令行的方式编译,编译命令如下 cl /D UNICODE /D _UNICODE main.cpp SimpleWindow.cpp /link /subsystem:windows /entry:wmain user32.lib gdi32.lib 发现报如下截图所示错误, 如果我改用如下命令就可以成功编译并运行 cl main.cpp SimpleWindow.cpp /link /subsystem:windows /entry:main user32.lib gdi32.lib 为什么会这样呢?_ ![图片说明](https://img-ask.csdn.net/upload/201907/14/1563091012_801699.jpg) ``` /* * File name: main.cpp * 测试SimpleWindow类 */ #include "SimpleWindow.h" /* * 窗口过程函数 */ LRESULT CALLBACK WindowProcedure(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_LBUTTONDOWN: MessageBox(hWnd, TEXT("Left button is pressed."), TEXT(""), MB_OK); return 0; case WM_CLOSE: if(MessageBox(hWnd, TEXT("Sure to close?"), TEXT(""), MB_YESNO) == IDYES) DestroyWindow(hWnd); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; default: return DefWindowProc(hWnd, msg, wParam, lParam); } } int _tmain() { /* * 创建窗口,设置标题和窗口大小 */ SimpleWindow myWindow(TEXT("My First Window"), 600, 400); /* * 显示窗口 */ myWindow.Show(); /* * 设置窗口过程函数 */ myWindow.SetCallback(WindowProcedure); /* * 进入消息循环 */ myWindow.LoopForRequest(); return 0; } ``` 下面为SimpleWindow.h代码 ``` /* * File name: SimpleWindow.h * SimpleWindow类的接口定义 */ #ifndef _SimpleWindow_h #define _SimpleWindow_h #include <windows.h> #include <tchar.h> class SimpleWindow { public: SimpleWindow(PTSTR windowTitle, int windowWidth, int windowHeight); void Show() const; void LoopForRequest() const; void SetCallback(WNDPROC WindowProcedure); private: bool registerWindowClass(LPTCH windowClassName); private: WNDCLASS wndClass; HWND hWnd; HINSTANCE hCurrentInstance; }; #endif ``` 下面为SimpleWindow.cpp代码 ``` /* * File name: SimpleWindow.cpp * SimpleWindow类的实现 */ #include "SimpleWindow.h" /* * 创建窗口句柄,指定窗口标题和窗口大小 */ SimpleWindow::SimpleWindow(PTSTR windowTitle, int windowWidth, int windowHeight) { hCurrentInstance = GetModuleHandle(NULL); if(!registerWindowClass(TEXT("SimpleWindow"))) { MessageBox(NULL, TEXT("Can't register a window class."), windowTitle, MB_OK); exit(EXIT_FAILURE); } hWnd = CreateWindow(TEXT("SimpleWindow"), windowTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, windowWidth, windowHeight, NULL, NULL, hCurrentInstance, NULL); } /* * 显示窗口 */ void SimpleWindow::Show() const { ShowWindow(hWnd, SW_SHOW); UpdateWindow(hWnd); } /* * 进入消息循环 */ void SimpleWindow::LoopForRequest() const { MSG msg; while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } } /* * 设置窗口过程函数 */ void SimpleWindow::SetCallback(WNDPROC WindowProcedure) { SetWindowLong(hWnd, GWL_WNDPROC, (LONG)WindowProcedure); } /* * 注册窗口类,注册成功则返回true,否则返回false */ bool SimpleWindow::registerWindowClass(LPTCH windowClassName) { wndClass.style = CS_HREDRAW|CS_VREDRAW; wndClass.lpfnWndProc = DefWindowProc; wndClass.cbClsExtra = 0; wndClass.cbWndExtra = 0; wndClass.hInstance = hCurrentInstance; wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndClass.lpszMenuName = NULL; wndClass.lpszClassName = windowClassName; if(!RegisterClass(&wndClass)) return false; else return true; } ```
DIRECT 3d 的2D 编程 这本书折覆餗的一个问题,检查是否支持窗口渲染,出错
我看这本书学习的,前面都可以,也是完全按照书来学习的,到这步,书上有一段检查 是否支持窗口渲染的程序,我编译却是错误: g_caps.Caps2&D3DCAPS2_CANRENDERWINDOWED 提示 这个宏没有定义, 书是DX8 我用DX9,我问下是否不是宏 变了,还是成员变了,请帮帮忙了。
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小人工智障。 思路可以运用在不同地方,主要介绍的是思路。
面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观...
MyBatis研习录(01)——MyBatis概述与入门
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis原本是apache的一个开源项目iBatis, 2010年该项目由apache software foundation 迁移到了google code并改名为MyBatis 。2013年11月MyBatis又迁移到Github。
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip installselenium -ihttps://pypi.tuna.tsinghua.edu.cn/simple/ ...
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
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 获取数据
爬虫,从本质上来说,就是利用程序在网上拿到对我们有价值的数据。 爬虫能做很多事,能做商业分析,也能做生活助手,比如:分析北京近两年二手房成交均价是多少?广州的Python工程师平均薪资是多少?北京哪家餐厅粤菜最好吃?等等。 这是个人利用爬虫所做到的事情,而公司,同样可以利用爬虫来实现巨大的商业价值。比如你所熟悉的搜索引擎——百度和谷歌,它们的核心技术之一也是爬虫,而且是超级爬虫。 从搜索巨头到人工...
Python绘图,圣诞树,花,爱心 | Turtle篇
每周每日,分享Python实战代码,入门资料,进阶资料,基础语法,爬虫,数据分析,web网站,机器学习,深度学习等等。 公众号回复【进群】沟通交流吧,QQ扫码进群学习吧 微信群 QQ群 1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle()...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
web前端javascript+jquery知识点总结
1.Javascript 语法.用途 javascript 在前端网页中占有非常重要的地位,可以用于验证表单,制作特效等功能,它是一种描述语言,也是一种基于对象(Object)和事件驱动并具有安全性的脚本语言 ...
Python实战:抓肺炎疫情实时数据,画2019-nCoV疫情地图
今天,群里白垩老师问如何用python画武汉肺炎疫情地图。白垩老师是研究海洋生态与地球生物的学者,国家重点实验室成员,于不惑之年学习python,实为我等学习楷模。先前我并没有关注武汉肺炎的具体数据,也没有画过类似的数据分布图。于是就拿了两个小时,专门研究了一下,遂成此文。
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o...
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ...... ...
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!...
渗透测试-灰鸽子远控木马
木马概述 灰鸽子( Huigezi),原本该软件适用于公司和家庭管理,其功能十分强大,不但能监视摄像头、键盘记录、监控桌面、文件操作等。还提供了黑客专用功能,如:伪装系统图标、随意更换启动项名称和表述、随意更换端口、运行后自删除、毫无提示安装等,并采用反弹链接这种缺陷设计,使得使用者拥有最高权限,一经破解即无法控制。最终导致被黑客恶意使用。原作者的灰鸽子被定义为是一款集多种控制方式于一体的木马程序...
Python:爬取疫情每日数据
前言 目前每天各大平台,如腾讯、今日头条都会更新疫情每日数据,他们的数据源都是一样的,主要都是通过各地的卫健委官网通报。 以全国、湖北和上海为例,分别为以下三个网站: 国家卫健委官网:http://www.nhc.gov.cn/xcs/yqtb/list_gzbd.shtml 湖北卫健委官网:http://wjw.hubei.gov.cn/bmdt/ztzl/fkxxgzbdgrfyyq/xxfb...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名...
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计...
Python新型冠状病毒疫情数据自动爬取+统计+发送报告+数据屏幕(三)发送篇
今天介绍的项目是使用 Itchat 发送统计报告 项目功能设计: 定时爬取疫情数据存入Mysql 进行数据分析制作疫情报告 使用itchat给亲人朋友发送分析报告 基于Django做数据屏幕 使用Tableau做数据分析 来看看最终效果 目前已经完成,预计2月12日前更新 使用 itchat 发送数据统计报告 itchat 是一个基于 web微信的一个框架,但微信官方并不允许使用这...
作为程序员的我,大学四年一直自学,全靠这些实用工具和学习网站!
我本人因为高中沉迷于爱情,导致学业荒废,后来高考,毫无疑问进入了一所普普通通的大学,实在惭愧???? 我又是那么好强,现在学历不行,没办法改变的事情了,所以,进入大学开始,我就下定决心,一定要让自己掌握更多的技能,尤其选择了计算机这个行业,一定要多学习技术。 在进入大学学习不久后,我就认清了一个现实:我这个大学的整体教学质量和学习风气,真的一言难尽,懂的人自然知道怎么回事? 怎么办?我该如何更好的提升自...
粒子群算法求解物流配送路线问题(python)
1.Matlab实现粒子群算法的程序代码:https://www.cnblogs.com/kexinxin/p/9858664.html matlab代码求解函数最优值:https://blog.csdn.net/zyqblog/article/details/80829043 讲解通俗易懂,有数学实例的博文:https://blog.csdn.net/daaikuaichuan/article/...
教你如何编写第一个简单的爬虫
很多人知道爬虫,也很想利用爬虫去爬取自己想要的数据,那么爬虫到底怎么用呢?今天就教大家编写一个简单的爬虫。 下面以爬取笔者的个人博客网站为例获取第一篇文章的标题名称,教大家学会一个简单的爬虫。 第一步:获取页面 #!/usr/bin/python # coding: utf-8 import requests #引入包requests link = "http://www.santostang....
前端JS初级面试题二 (。•ˇ‸ˇ•。)老铁们!快来瞧瞧自己都会了么
1. 传统事件绑定和符合W3C标准的事件绑定有什么区别? 传统事件绑定 &lt;div onclick=""&gt;123&lt;/div&gt; div1.onclick = function(){}; &lt;button onmouseover=""&gt;&lt;/button&gt; 注意: 如果给同一个元素绑定了两次或多次相同类型的事件,那么后面的绑定会覆盖前面的绑定 (不支持DOM事...
相关热词 c# 时间比天数 c# oracle查询 c# 主动推送 事件 c# java 属性 c# 控制台 窗体 c# 静态类存值 c#矢量作图 c#窗体调用外部程式 c# enum是否合法 c# 如何卸载引用
立即提问