c语言怎样调用文本文件里面的数据。

如果我要做一个通讯录一样的文件,需要将每个用户的信息用结构体存在一个文本文件里面,当我要查询,添加或删除用户时,需要调用这个文本文件里面的数据,应该怎样实现调用信息?最好能够具体到具体的某个数,比如说我需要调用student[i].number这样具体的数值。

suannai0314
鹳狸媛 楼主的这个问题解决了么?下边的答案能解决问题么?如果可以麻烦点击答案旁的√采纳哦~如果没有也可以将自己的答案贴上然后进行采纳的。
6 年多之前 回复

2个回答

如果一定要用文本文件,而不用数据库的话,建议用xml格式的文本文件。
先设计好xml的格式,再使用第三方提供的xml操作类库(网上搜),就可以实现你需要的功能。

你以块的方式,每次读一个块出来,循环一下不就找到第i个了吗,然后写的时候用append方式,应该没什么问题吧?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c语言如何读取文本文件中指定的字符串并保存到字符串数组中?
!(图片说明](https://img-ask.csdn.net/upload/201907/16/1563261125_779598.png) 如图片所示,一组数据包含多行,如何使用c语言读取该文件并将每组数据保存到字符串数组中?(总共181组数据)
c语言使用socket发送图片文件大小正确,但是无法打开是怎么回事?
使用c语言socket通信写了一个客户端与服务器,然后客户端向服务器发送文件,服务器接收。使用自己定义的数据包协议,服务器使用单线程epoll。最后测试时,文本文件发送没有问题,但是发送图片文件,最后图片的大小没有问题,但是无法打开,提示错误:分析 JPEG 图像文件时出错(Improper call to JPEG library in state 201) 。 文件的操作使用linux下系统调用read,write,open 。请问问题可能出现在哪里?
C语言写入数据到二进制文件失败
# 相关代码如下 # 我在add()调用lessondatewrite()写进去了 #但是lessondateltater()调用lessondatewrite()没写进去 # 调试结果![图片说明](https://img-ask.csdn.net/upload/201811/02/1541169947_50238.png) #运行结果 英语行的 40 应该变成39 ![图片说明](https://img-ask.csdn.net/upload/201811/02/1541169992_687847.png) ``` typedef struct //定义一个Lesson类型的结构体 { char name[50]; char techer[50]; char location[50]; char time[50]; int number; }LESSON; /*课程结构体参数 课程名 char 50字节 授课老师 char 50字节 位置 char 50字节 开课时间 char 50字节 座位数 int 4字节 结构体大小总计 204字节*/ LESSON lessondatewrite(FILE *fl,LESSON date)//这是一个结构体类型的函数,它可以写入课程数据,接受一个文件指针 { fflush(fl);//刷新缓存区 使将要输入的数据写入硬盘 一次性输入大量数据时使用 避免输入失败 fwrite(&date,sizeof(LESSON),1,fl); } void add()//添加一个课程数据 { FILE *lessondate; LESSON lesson={0};// 声明一个LESSON类型的变量为lesson if((lessondate=fopen("lessondate","rb+"))==NULL)//若文件不存在,则建立文件 { lessondate=fopen("lessondate","wb+"); //rb+打开二进制文本文件,允许读写,若不存在返回空 //wb+新建二进制文本文件,允许读写。如果文件存在则删除文件重建 } printf("请依次输入如下数据,课程名,授课老师,教室位置,开课时间(xx月xx日xx:xx),座位数(各数据以空格隔开,回车结束)\n"); scanf("%s %s %s %s %d",&lesson.name,&lesson.techer,&lesson.location,&lesson.time,&lesson.number); //scanf在接收字符串时 不会接收空白符(空格与回车) 逗号或其他都能接收 //%s不能使用char 而是char[] fseek(lessondate,0L,SEEK_END); lessondatewrite(lessondate,lesson); fclose(lessondate); system("cls"); admin(); } void lessondatelater(int choose) { FILE *lessondate; LESSON lesson={0}; int i; lessondate=fopen("lessondate","rb+"); for(i=0;i<choose;i++) { lesson=lessondateread(lessondate);//给读取函数传递一个文件指针 假定有是三个结构体A B C 循环结束后光标在C前面B后面 } fseek(lessondate,-204L,SEEK_CUR);//后退到上一个结构体 此时光标在B前面 lesson=lessondateread(lessondate);//读取这个结构体数据 读取B的数据 此时光标前进到C前面 lesson.number--;//修改结构体数据 fseek(lessondate,-204L,SEEK_CUR);//后退到上一个结构体 此时光标在B前面 lessondatewrite(lessondate,lesson);//写入修改后结构体数据 覆盖B } ```
请问怎么使用matlab或者其他汇编语言读取一系列文本中所需数据?
请问怎么用matlab或者其他汇编语言读取一系列文本(txt格式,命名如001,002,003...)中的某一个标志符号(比如说是一个经纬度:40°44'N,116°33'E,每一个文件都有这个经纬度)之后的一个数据(或者说所在的一行数据)?如:001文本中是40°44'N,116°33'E 396.254,就需要读取出396.254,然后把所有的数据放到一个数组里面保存或者显示出来,谢谢~
socket 编程问题(C语言)
客户端将要处理的文件/数据传输到服务器端,服务器端对此文本文件进行处理,并将结果传输给客户端,客户端进行显示。 我初学socket编程,请大家多指教。使用C语言
C语言写使用fprintf和fscanf的问题
我这个程序是用C语言写的,其中构造了两个函数来将我输入的数据保存到文本文件当中,可是调用savefile函数保存数据到文件中,再调用readfile函数时所输入的数据都没了,说明一下,我做的这个是通讯录管理系统,这两个函数的代码如下,求大神帮我解答,在此本人先谢过了 void readfile() { char *p="Linkman.txt"; FILE *fp; int i=0; if ((fp=fopen("Linkman.txt","r"))==NULL) { printf("Open file %s error! Strike any key to exit!",p); system("pause"); exit(0); } while(fscanf(fp,"%s %s %d %s %s %s %s %d/%d/%d %s",man_table[i].name,man_table[i].sex,&man_table[i].telnumber,man_table[i].mobilenumber,man_table[i].qqnumber,man_table[i].mailbox,man_table[i].address,&man_table[i].birthday.year,&man_table[i].birthday.month,&man_table[i].birthday.day,man_table[i].level)==9) { i++; i=i; } fclose(fp); n=i; printf("录入完毕!\n"); } void savefile() { int i; FILE *fp; fp=fopen("Linkman.txt","w"); /*写入*/ for(i=0;i<n;i++) { fprintf(fp,"%s %s %d %s %s %s %s %d/%d/%d %c",man_table[i].name,man_table[i].sex,man_table[i].telnumber,man_table[i].mobilenumber,man_table[i].qqnumber,man_table[i].mailbox,man_table[i].address,man_table[i].birthday.year,man_table[i].birthday.month,man_table[i].birthday.day,man_table[i].level); } fclose(fp); }
用C语言编写简单学生学籍管理系统。有一段已经定义好的函数,求大佬帮忙编写完整。在线急等。求各位大佬帮帮忙,重谢!!
``` #include <stdio.h> #include <string.h> #include <stdlib.h> #include <conio.h> typedef struct { int Id; //学号 char name[10]; //姓名 char sex[2]; //性别 int room; //宿舍号 int tel; //电话号码 } StudentInfo; //定义学生信息的结构体类型 typedef struct { int Id; char courseNo[10]; //课程编号 char courseName[20];//课程名 double a; // 课程学分 double b; // 平时成绩 double c; // 实验成绩 double d; // 卷面成绩 double e; // 综合成绩 double f; // 实际学分 } MarkInfo; //定义课程信息的结构体类型 void ReadFile(); //读取文件 void DisplayMainMenu(); //显示主菜单 void DataInput(); //数据录入 void DataQuery(); //数据查询 void DataDelete(); //数据删除 void DataSort(); //数据排序 void QueryById(int ); //按学号查询 void QueryByRoom(int ); //按宿舍查询 void QueryMark(int ); //按成绩查询 void sort1(); //按综合成绩排序 void sort2(); //按实得学分排序 void markput(); //成绩输出 StudentInfo si[30]; // 学生信息结构数组 MarkInfo mi[150]; // 学生成绩结构数组 int sp=0; // 学生信息结构数组中学生数 int mp=0; // 学生成绩结构数组中成绩数 void ReadFile( )//读取文件 { FILE *fp; if((fp = fopen("A.txt","r"))==NULL) printf("cant open the file\n"); while (!feof(fp)) { fscanf(fp,"%d%s%s%d%d",&si[sp].Id,si[sp].name,&si[sp].sex,&si[sp].room,&si[sp].tel); sp++; } fclose (fp); fp = fopen("B.txt","r"); while (!feof(fp)) { fscanf(fp,"%d%s%s%d%d%d%d",&mi[mp].Id,mi[mp].courseNo,mi[mp].courseName,&mi[mp].a,&mi[mp].b,&mi[mp].c, &mi[mp].d); if (mi[mp].c == -1) mi[mp].e = 0.3*(mi[mp].b/1.0)+0.7*(mi[mp].d/1.0); else mi[mp].e = 0.15*(mi[mp].b/1.0)+0.15*(mi[mp].c/1.0)+0.7*(mi[mp].d/1.0); if(mi[mp].e >= 90. ) mi[mp].f = mi[mp].a; else if ( mi [mp].e >= 80. ) mi[mp].f = mi[mp].a *0.8; else if ( mi[mp].e >= 70. ) mi[mp].f = mi[mp].a *0.75; else if ( mi[mp].e >= 60. ) mi[mp].f = mi[mp].a *0.6; else mi[mp].f = 0; mp++; } fclose(fp); } void DisplayMainMenu() //显示主菜单 { printf ("\n 1) 数据录入 \n 2) 数据查询 \n 3) 数据删除 \n 4) 数据排序 \n 5) 程序结束\n "); } void DataInput()//数据查询 { FILE *fp; int i; printf ("学生的学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩\n"); while(1) { scanf("%d%s%s%d%d%d%d",&mi[mp].Id,mi[mp].courseNo,mi[mp].courseName,&mi[mp].a,&mi[mp].b,&mi[mp].c, &mi[mp].d); if(mi[mp].Id==-1) break; if (mi[mp].c == -1) mi[mp].e = 0.3*mi[mp].b+0.7*mi[mp].d; else mi[mp].e = 0.15*mi[mp].b+0.15*mi[mp].c+0.7*mi[mp].d; if ( mi[mp].e >= 90. ) mi[mp].f = mi[mp].a; else if ( mi [mp].e >= 80. ) mi[mp].f = mi[mp].a *0.8; else if ( mi[mp].e >= 70. ) mi[mp].f = mi[mp].a *0.75; else if ( mi[mp].e >= 60. ) mi[mp].f = mi[mp].a *0.6; else mi[mp].f = 0; mp++; } fp = fopen("B.txt","r+"); for(i=0;i<mp;i++) { fprintf(fp,"%d%s%s%d%d%d%d",&mi[i].Id,mi[i].courseNo,mi[i].courseName,&mi[i].a,&mi[mp].b,&mi[i].c, &mi[i].d); fclose(fp); } } void DataQuery()//数据查询 { int x,y,z; printf("\n 1) 学生基本情况查询\n 2) 成绩查询\n");//--------------------------选择查询内容 scanf("%d",&x); if (x == 1) // 查询学生信息 { printf ("1) 按学号查询 2) 按宿舍查询\n");//-------------------------------选择查询方式 scanf("%d",&y); if (y == 1 ) { printf ("输入学号\n");//-----------------------------------------------按学生学号查询 scanf ("%d",&z); QueryById(z); } if (y == 2) { } if ( x ==2) // 查询成绩信息---------------------------------------查询学生成绩(输入学号) { printf ("输入学号\n"); scanf ("%d",&y); QueryMark(y); } } } void DataDelete()//数据删除 { FILE *fp; int x; int i=0; int k,d; printf( "输入学号\n"); scanf( "%d",&x); while( si[i].Id != x) i++; if (i<sp-1) { for ( k=i; k<sp-1; k++) { si[k] = si[k+1]; } } if ( i<sp) sp--; d = 0; for (k=0;k<mp;k++) { if ( mi[k].Id == x ) d++; else mi[k-d] = mi[k]; } mp = mp - d; fp = fopen("D:B.txt","r+"); for(i=0;i<mp;i++) fprintf(fp,"%d%s%s%d%d%d%d",&mi[i].Id,mi[i].courseNo,mi[i].courseName,&mi[i].a,&mi[i].b,&mi[i].c, &mi[i].d); } void sort1() { int i,j; MarkInfo t; for (i=mp-1;i>=1;i--) { for (j=0;j<i;j++) { if (mi[j].e>mi[j+1].e) { t=mi[j]; mi[j] = mi[j+1]; mi[j+1] = t; } } } markput(); } ``` 这段函数是定义好的,求大佬帮帮忙编写完! 要求:使用下面的数据,用C语言设计一个简单的学籍管理系统,实现出最基本的功能。 学生基本信息文件(A.TXT)及其内容:A.TXT文件不需要编程录入数据,可用文本编辑工具直接生成: 学号 姓名 性别 宿舍号码 电话号码 01 张成成 男 501 87732111 02 李成华 女 101 87723112 03 王成凤 女 101 87723112 04 张明明 男 502 87734333 05 陈东 男 501 87732111 06 李果 男 502 87734333 07 张园园 女 102 87756122 … …. .. … ……….. 学生成绩基本信息文件(B.TXT)及其内容: 学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩 综合成绩 实得学分 01 A01 大学物理 3 66 78 82 02 B03 高等数学 4 78 -1 90 01 B03 高等数学 4 45 -1 88 02 C01 VF 3 65 76 66 … …. ………. .. .. … (一) 功能要求及说明: (1) 数据录入功能: 对B.TXT进行数据录入,只录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据. 综合成绩、学分由程序根据条件自动运算。 综合成绩的计算:如果本课程的实验成绩为-1,则表示无实验,综合成绩=平时成绩*30%+卷面成绩*70%; 如果实验成绩不为-1,表示本课程有实验,综合成绩=平时成绩*15%+实验成绩*.15%+卷面成绩*70% . 实得学分的计算: 采用等级学分制. 综合成绩在90-100之间 ,应得学分=学分*100% 综合成绩在80-90之间 ,应得学分=学分*80% 综合成绩在70-80之间 ,应得学分=学分*75% 综合成绩在60-70之间 ,应得学分=学分*60% 综合成绩在60以下 ,应得学分=学分*0% (2)查询功能:分为学生基本情况查询和成绩查询两种 A:学生基本情况查询: A1----输入一个学号或姓名(可实现选择),查出此生的基本信息并显示输出。 A2---输入一个宿舍号码,可查询出本室所有的学生的基本信息并显示输出。 B:成绩查询: B1:输入一个学号时,查询出此生的所有课程情况,格式如下: 学 号:xx 姓 名:xxxxx 课程编号:xxx 课程名称:xxxxx 综合成绩:xxxx 实得学分: xx 课程编号:xxx 课程名称:xxxxx 综合成绩:xxxx 实得学分: xx 课程编号:xxx 课程名称:xxxxx 综合成绩:xxxx 实得学分: xx … … … … ……… … … 共修:xx科,实得总学分为: xxx (3)删除功能:当在A.TXT中删除一个学生时,自动地在B.TXT中删除此人所有信息。 (4 ) 排序功能:能实现选择按综合成绩或实得学分升序或降序排序并显示数据。
如何在C#窗口应用程序中调用并显示数据库内容
1.我建立了一个access数据库并使用程序进行调用,使用datagridview可以显示出来 2.我的问题是怎么通过一个button按钮对数据库内容进行筛选调用,并且可以将其显示到textbox中 ``` using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Data.OleDb; namespace text01 { public partial class Form1 : Form { public Form1() { InitializeComponent(); OleDbConnection thisConnection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\赵吉利15067\Desktop\access数据库文件夹\20190225-数据完整版1.mdb"); string sql = "select * from 总表(二字词、三字词、四字词)"; OleDbDataAdapter thisAdapter = new OleDbDataAdapter(sql, thisConnection); System.Data.DataSet thisDataSet = new System.Data.DataSet(); thisAdapter.Fill(thisDataSet, "table"); DataTable dt = thisDataSet.Tables["table"]; this.dataGridView1.DataSource = dt; /*设置抽取选项,按照属性 单元 序号的顺序抽取*/ thisConnection.Close(); } private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { } } } ``` 主要目的是通过一个按钮实现对数据库的调用,并且显示在空白文本框里面
c语言数据结构问题 代码相似性度量
我的思路:对要进行比较的所有代码段进行词法分析,并转化为特定的标记(token)串,自己制定一个转换规则。接着,通过两两比较标记(token)串来确定代码之间的相似性,并由此确定代码之间抄袭的程度。 将这两个代码分别转换为token串后,基于算法RKR-GST( running-karp-rabin greedy-string-tiling)算法思想,循环求取两个标记串中未被匹配部分的最大公共子串,将其用空格代替,并根据公式求出两个token串A,B的相似度 源代码 #include <stdio.h> #include <string.h> #include <ctype.h> #include <conio.h> #include <malloc.h> #include <stdlib.h> #include <windows.h> #define N 10000 #define M 10000 #define MAXSTRLEN 10000 //定义最大串长 typedef int status; typedef unsigned char SString[MAXSTRLEN+1]; //串的定长顺序存储表示 SString a[3]={"int","long","short"}; SString b[2]={"float","double"}; SString c[15]={"&&","||","++","--","+","-","*","/","=",">=","<=","==","!=",">","<"}; SString d[12]={"[","]","{","}","(",")",",",";","'","#",";","."}; SString e[29]={"auto","break","case","char","const","continue","default","do","else","enum", "extern","for","goto","if","main","printf","register","return","signed","sizeof", "static","struct","switch","typedef","union","unsigned","void","while","volatile"}; HANDLE hOut; DWORD written; void ShadowWindowLine(char *str); char type(char *str); void token(char name[],char list[],char token[],FILE *table); void simple(int MinMatchLen,FILE *fp1,FILE *fp2); status replace(SString s,int pos,int len,int Ls); int copy(float n); void ShadowWindowLine(char *str) { SMALL_RECT rc; CONSOLE_SCREEN_BUFFER_INFO bInfo; // 窗口缓冲区信息 WORD att0,att1,attBack; int i, chNum = strlen(str); GetConsoleScreenBufferInfo( hOut, &bInfo ); // 获取窗口缓冲区信息 // 计算显示窗口大小和位置 rc.Left = (bInfo.dwSize.X - chNum)/2 - 2; rc.Top = 8; // 原代码段中此处为bInfo.dwSize.Y/2 - 2,但是如果您的DOS屏幕有垂直滚动条的话,还需要把滚动条下拉才能看到,为了方便就把它改为10 rc.Right = rc.Left + chNum + 4; rc.Bottom = rc.Top + 4; att0 = BACKGROUND_RED |BACKGROUND_BLUE; // 阴影属性 att1 = FOREGROUND_RED |FOREGROUND_GREEN |FOREGROUND_BLUE | FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_BLUE | BACKGROUND_INTENSITY;// 文本属性 attBack = BACKGROUND_RED |BACKGROUND_GREEN |BACKGROUND_BLUE | BACKGROUND_INTENSITY; // 背景属性 // 设置阴影然后填充 COORD posShadow = {rc.Left+1, rc.Top+1}, posText = {rc.Left, rc.Top},posBack={0,0}; for (i=0;i<25;i++) { FillConsoleOutputAttribute(hOut, attBack,80, posBack, &written); posBack.Y++; } for (i=0; i<5; i++) { FillConsoleOutputAttribute(hOut, att0, chNum + 4, posShadow, &written); posShadow.Y++; } for (i=0;i<5;i++) { FillConsoleOutputAttribute(hOut, att1,chNum + 4, posText, &written); posText.Y++; } // 写文本和边框 posText.X = rc.Left + 2; posText.Y = rc.Top + 2; WriteConsoleOutputCharacter(hOut, str, strlen(str), posText, &written); SetConsoleTextAttribute(hOut, bInfo.wAttributes); // 恢复原来的属性 } char type(char *str) //此函数判断单词类型 { int i; for(i=0;i<3;i++) //a中的关键字 { if(strcmp(str,a[i])==0) return 'K'; } for(i=0;i<2;i++) //b中的关键字 { if(strcmp(str,b[i])==0) return 'E'; } for(i=0;i<15;i++) //c中的符号 { if(strcmp(str,c[i])==0) return 'A'; } for(i=0;i<12;i++) //d中符号 { if(strcmp(str,d[i])==0) return 'R'; } for(i=0;i<29;i++) //e中的关键字 { if(strcmp(str,e[i])==0) return 'Y'; } if(isdigit(str[0])) //0-9是数字 { return 'N'; } //一般的变量与字符 if(!isalnum(str[0])) return 'H'; else return 'C';//变量 } void token(char name[],char list[],char token[],FILE *table) //将两个文件中的字符串分别切割转换为token串 {    FILE *in,*out; char ch,c,buffer[N],*link[M]; int i=0,j=0,k=0,LenLink=0; if((in=fopen(name,"r+"))==NULL) { printf("源文件无法打开!\n"); exit(0); } if((out=fopen(list,"w+"))==NULL) { printf("文件写入失败!\n"); exit(0); } if((table=fopen(token,"w+"))==NULL) { printf("文件写入失败!\n"); exit(0); } while(!feof(in)) //逐字读取文件 { ch=fgetc(in); if(ch=='\t' || ch==' ' || ch== '\n') //去掉空格、制表符、回车 continue; if(isalpha(ch)) //如果首字符是字母 { while(isalnum(ch)&&(i<N)) //其他位是字母或数字 { buffer[i++]=ch; ch=fgetc(in); } buffer[i]='\0'; link[j++]=(char *)malloc(sizeof(char)*(strlen(buffer)+1)); strcpy(link[j-1],buffer); i=0; fseek(in,-1L,1); //在文件当中定位 } else if(isdigit(ch)) //如果首字符是数字 { while(isalnum(ch)&&(i<N)) //其他位是字母或数字 { buffer[i++]=ch; ch=fgetc(in); } buffer[i]='\0'; link[j++]=(char *)malloc(sizeof(char)*(strlen(buffer)+1)); strcpy(link[j-1],buffer); i=0; fseek(in,-1L,1); } else if(!isalnum(ch)) //如果首字符既不是数字也不是字母 { if(ch!='\n'&&ch!=' '&&ch!='\t') { if(ch=='>'||ch=='<'||ch=='!') //以下代码实现超前搜索 { if((c=fgetc(in))=='=') //>=,<=,!=这些需被认为是一个符号 { buffer[i++]=ch; buffer[i++]=c; buffer[i]='\0'; link[j++]=(char *)malloc(sizeof(char)*3); strcpy(link[j-1],buffer); i=0; } else { buffer[i++]=ch; buffer[i]='\0'; link[j++]=(char *)malloc(sizeof(char)*2); strcpy(link[j-1],buffer); i=0; fseek(in,-1L,1); } } else if(ch=='+'||ch=='-'||ch=='&'||ch=='|'||ch=='=') { if((c=fgetc(in))==ch) //++,--,&&,||,==这些需被认为是一个符号 { buffer[i++]=ch; buffer[i++]=c; buffer[i]='\0'; link[j++]=(char *)malloc(sizeof(char)*3); strcpy(link[j-1],buffer); i=0; } else { buffer[i++]=ch; buffer[i]='\0'; link[j++]=(char *)malloc(sizeof(char)*2); strcpy(link[j-1],buffer); i=0; fseek(in,-1L,1); } } else //其他符号 { buffer[i++]=ch; buffer[i]='\0'; link[j++]=(char *)malloc(sizeof(char)*2); strcpy(link[j-1],buffer); i=0; } } } } LenLink = j-1; //存到link中的总长度 for(i=0;i<LenLink;i++) //打印token中的内容 { c=type(link[i]); // if(c=='N'||c=='A'||c=='R')//数字,符号在表中保留 fputs(link[i],table); if(c=='C') //变量均替换为id fputs("id",table); if(c=='K')//关键字int,short,long替换为zh fputs("zh",table); if(c=='E')//关键字float,double替换为fu fputs("fu",table); if(c=='Y')//其他关键字不变 fputs(link[i],table); if(c=='H')//汉字删掉 fputs("\0",table); } fclose(table); fprintf(out,"\t***** 单词类型观察表 *****\n");//打印list中的内容 fprintf(out,"\t K --int,short,long \n"); fprintf(out,"\t E --float,double\n"); fprintf(out,"\t Y --其他关键字\n"); fprintf(out,"\t A --运算符号\n"); fprintf(out,"\t R --语言符号\n"); fprintf(out,"\t N --数字\n"); fprintf(out,"\t H --汉字\n"); fprintf(out,"\t C --一般变量或标识符\n"); fprintf(out,"\t*****************************\n"); for(i=0;i<LenLink;i++) { c=type(link[i]); //判断单词的类型 fputc('(',out); fputc(c,out); fputc(',',out); fputs(link[i],out); fputc(',',out); fprintf(out,"%d",i); fputc(')',out); fputc('\n',out); } } void simple(int MinMatchLen,FILE *fp1,FILE *fp2)//此函数计算相似度,MinMatchLen: 公共子串要达到的最小长度 { SString A,B; char ch,h; int i=0,j=0,k,t,s,a=1,La,Lb,lena,lenb,x,y; float n; int MatchLen=0;//所有公共子串的总长度 int maxmatch;//当前最大公共子串长度 if ((fp1=fopen("f:\\token1.txt","r"))==NULL)//设定文件位于当前目录下,可更改为绝对路径 { printf("文件打开失败!"); getch(); exit(0); } A[++i]=fgetc(fp1); while(!feof(fp1)) A[++i]=fgetc(fp1); fclose(fp1); La=i-1; printf("token串1长度为%d,",La); if ((fp2=fopen("f:\\token2.txt","r"))==NULL)//设定文件位于当前目录下,可更改为绝对路径 { printf("文件打开失败!"); getch(); exit(0); } B[++j]=fgetc(fp2); while(!feof(fp2)) B[++j]=fgetc(fp2); fclose(fp2); Lb=j-1; printf("token串2长度为%d\n",Lb); printf("是否要查看这两个token串?Y/N "); h=getchar(); if(h=='Y'||h=='y') { ShellExecute(NULL,"open","F:\\token1.txt",NULL,NULL,SW_SHOWNORMAL); ShellExecute(NULL,"open","F:\\token2.txt",NULL,NULL,SW_SHOWNORMAL); } getchar(); printf("\n将超过指定长度的公共子串用空格替换,是否要查看细节?Y/N "); ch=getchar(); lena=i-1; lenb=j-1; do { maxmatch=MinMatchLen; for(i=1;i<=La;i++) { for(j=1;j<=Lb;j++) { k=0; while((k<=La-i)&&(k<=Lb-j)&&(A[i+k]==B[j+k])&&((A[i+k]!='\0')||(B[j+k]!='\0'))&&(A[i+k]!=' ')&&(B[j+k]!=' ')) //串A的第i+k个字符与串B的第j+k个字符是否相等 k++; if(k>maxmatch) { maxmatch=k; x=i; y=j; } } } if(maxmatch>MinMatchLen) { replace(A,x,maxmatch,La); replace(B,y,maxmatch,Lb); La=La-maxmatch+1; Lb=Lb-maxmatch+1; MatchLen+=maxmatch; } if(ch=='Y'||ch=='y') { printf("第%d次检查两串中的匹配串\n",a); a++; for(s=1;s<=La;s++) printf("%c",A[s]); printf("\n"); for(s=1;s<=Lb;s++) printf("%c",B[s]); printf("\n"); } } while(maxmatch>MinMatchLen); printf("\n已经没有能够匹配的公共子串了\n"); n=(2.0*MatchLen)/(lena+lenb); printf("公共子串的总长为%d,",MatchLen); printf("根据公式\n"); printf("\t\t ——————————————————————————\n"); printf("\t\t| 相似度=(2×公共子串长度)÷(串A长度+串B长度) |\n"); printf("\t\t ——————————————————————————\n"); printf("这两串代码的相似度为%f\n",n); copy(n); } status replace(SString s,int pos,int len,int Ls) //用空格来代替两个token串中的最大匹配子串 { int i; if(pos<1||pos>Ls-len+1||len<0) return 0; s[pos]=' '; for(i=pos+len;i<=Ls;i++) { s[i-len+1]=s[i]; } return 1; } int copy(float n) //此函数判断是否抄袭 { printf("\n相似度超过0.8,则认为是抄袭"); if(n>=0.8) printf("\n这两个代码有抄袭嫌疑,请做进一步检查"); else printf("\n这两个代码没有抄袭嫌疑"); return 0; } void main(void) { hOut = GetStdHandle(STD_OUTPUT_HANDLE); // 获取标准输出设备句柄 SetConsoleOutputCP(936); // 设置代码页,此为中文简体 ShadowWindowLine(" 欢迎使用C语言代码复制/相似度检测软件 "); getchar(); system("cls"); //清屏 char name1[50]; char name2[50]; //存储输入的文件路径字符串 FILE *f1,*f2; system("color F3"); printf("\n代码1:"); scanf("%s",name1); token(name1,"f:\\list1.txt","f:\\token1.txt",f1); printf("代码2:"); scanf("%s",name2); token(name2,"f:\\list2.txt","f:\\token2.txt",f2); printf("\ntoken串已生成成功,"); getchar(); simple(3,f1,f2); }
C语言提取BMP图片遇到的问题
有几个问题想请教一下大家。 1:比如100 * 100像素的图片,它对角线应该有200个像素,还是141个像素? 2:100 * 100像素的BMP提取出来的像素点 有30000个还是40000个?我用以下代码提取的是40000个,分别是R,G,B和那个保留吗?还是其他什么? 3:我想实现的是:8位BMP的对角线像素点提取到文本文档,做着做着有点蒙圈了 #include <stdio.h> #include <stdlib.h> #pragma pack(2) /*定义WORD为两个字节的类型*/ typedef unsigned short WORD; /*定义DWORD为e四个字节的类型*/ typedef unsigned long DWORD; /*位图文件头*/ typedef struct BMP_FILE_HEADER { WORD bType; /* 文件标识符 */ DWORD bSize; /* 文件的大小 */ WORD bReserved1; /* 保留值,必须设置为0 */ WORD bReserved2; /* 保留值,必须设置为0 */ DWORD bOffset; /* 文件头的最后到图像数据位开始的偏移量 */ } BMPFILEHEADER; /*位图信息头*/ typedef struct BMP_INFO { DWORD bInfoSize; /* 信息头的大小 */ DWORD bWidth; /* 图像的宽度 */ DWORD bHeight; /* 图像的高度 */ WORD bPlanes; /* 图像的位面数 */ WORD bBitCount; /* 每个像素的位数 */ DWORD bCompression; /* 压缩类型 */ DWORD bmpImageSize; /* 图像的大小,以字节为单位 */ DWORD bXPelsPerMeter; /* 水平分辨率 */ DWORD bYPelsPerMeter; /* 垂直分辨率 */ DWORD bClrUsed; /* 使用的色彩数 */ DWORD bClrImportant; /* 重要的颜色数 */ } BMPINF; /*彩色表*/ typedef struct RGB_QUAD { WORD rgbBlue; /* 蓝色强度 */ WORD rgbGreen; /* 绿色强度 */ WORD rgbRed; /* 红色强度 */ //WORD rgbReversed; /* 保留值 */ } RGBQUAD; int main() { FILE *fp; BMPFILEHEADER fileHeader; BMPINF infoHeader; long offset, bmpImageSize, width, height, bytesPerPixel, size, bitCount; // int i, j; // unsigned char **p; WORD c; if ((fp = fopen("d://a1.bmp", "rb")) == NULL) { printf("Cann't open the file!\n"); exit(0); } fseek(fp, 0, 0); fread(&fileHeader, sizeof(fileHeader), 1, fp); fread(&infoHeader, sizeof(infoHeader), 1, fp); //计算并输出位图数据的偏移量,图像的大小,宽度和高度,每个像素点所占的字节 size = fileHeader.bSize; offset = fileHeader.bOffset; bmpImageSize = infoHeader.bmpImageSize; width = infoHeader.bWidth; height = infoHeader.bHeight; bitCount = infoHeader.bBitCount; bytesPerPixel = infoHeader.bBitCount / 8; printf("%d %d %d %d %d %d\n", size, offset, bmpImageSize, width, height, bitCount, bytesPerPixel); //输出每个像素点所占字节中的内容 c = fgetc(fp); int sum = 1; while (!feof(fp)) { printf("%d ", c); c = fgetc(fp); sum++; } printf("%d\n",sum-1); fclose(fp); return 0; }
利用winpcap抓包,已经可以抓包,但如何解析包头结构按字段写入文本文件?后面应该添加什么代码?
``` #define HAVE_REMOTE #include <pcap.h> /* packet handler 函数原型 */ void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data); int main() { pcap_if_t *alldevs; pcap_if_t *d; int inum; int i=0; pcap_t *adhandle; char errbuf[PCAP_ERRBUF_SIZE]; /* 获取本机设备列表 */ if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) { fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); exit(1); } /* 打印列表 */ for(d=alldevs; d; d=d->next) { printf("%d. %s", ++i, d->name); if (d->description) printf(" (%s)\n", d->description); else printf(" (No description available)\n"); } if(i==0) { printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); return -1; } printf("Enter the interface number (1-%d):",i); scanf("%d", &inum); if(inum < 1 || inum > i) { printf("\nInterface number out of range.\n"); /* 释放设备列表 */ pcap_freealldevs(alldevs); return -1; } /* 跳转到选中的适配器 */ for(d=alldevs, i=0; i< inum-1 ; d=d->next, i++); /* 打开设备 */ if ( (adhandle= pcap_open(d->name, // 设备名 65535, // 65535保证能捕获到不同数据链路层上的每个数据包的全部内容 PCAP_OPENFLAG_PROMISCUOUS, // 混杂模式 1000, // 读取超时时间 NULL, // 远程机器验证 errbuf // 错误缓冲池 ) ) == NULL) { fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name); /* 释放设备列表 */ pcap_freealldevs(alldevs); return -1; } printf("\nlistening on %s...\n", d->description); /* 释放设备列表 */ pcap_freealldevs(alldevs); /* 开始捕获 */ pcap_loop(adhandle, 0, packet_handler, NULL); return 0; } /* 每次捕获到数据包时,libpcap都会自动调用这个回调函数 */ void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data) { struct tm *ltime; char timestr[16]; time_t local_tv_sec; /* 将时间戳转换成可识别的格式 */ local_tv_sec = header->ts.tv_sec; ltime=localtime(&local_tv_sec); strftime( timestr, sizeof timestr, "%H:%M:%S", ltime); printf("%s,%.6ld len:%d\n", timestr, header->ts.tv_usec, header->len); } ```
怎么用C++编写组合对象的使用?
有以下要求: 1、设计类似PPT页的类CPPage,定义其数据成员、成员函数,要求至少包含一个矩形对象数组和一个椭圆形对象数组(最好是动态对象数组)(椭圆形类仿照矩形类设计) 2、设计成员函数Show显示本PPT页的相关信息:如矩形个数,椭圆形个数 3、设置CPPage类为矩形类的友元类;并在Show函数中直接访问矩形类的文本串。 4、增加一个静态成员对CPPage类进行计数; 5、对象信息的输入方式采用读取文本文件的方式。 注:拜托给出所有代码,救救孩子吧,万分感谢!
求大侠帮忙:C语言程序设计---编程题(以下所有题目程序应是非递归的)
1. 编写一个函数insert(s1,s2,ch),实现在字符串s1中的指定字符ch位置处插入字符串s2. 2. 学校工会组织活动,要求有8名教师参加,这8名教师将分别从A学院3名教师、B学院5名教师、C学院6名教师中任意抽取,且其中必须有B学院的教师参加,请编程输出所有可能的方案 3. 已知在C盘根目录下存有文本文件“file1.txt”,编程统计文件“file1.txt”中每个字母字符和每个数字字符出现的频率,在屏幕上显示统计结果,并将统计结果写入磁盘文件“file2.txt”中 4. 输入一个字符串,内有数字和非数字字符,如:AS234fgh456d 17968x7654,将其中连续的数字作为一个整体,依次存放到一数组a中,例如234存入a[0],456存入a[1],…,编程统计其共有多少个整数,并输出这些数。要求: 1) 编写函数完成将字符串中连续的数字作为一个整体,依次存放到一数组a中 2) 在主函数中完成数据的输入与结果的输出 5. 按由大到小的顺序对一个含有N个整型数据的数组A[N]进行排序,利用如下改进的选择排序方法:第一次选出最大者存入A[1],第二次选出最小者存入A[N],第三次选出次大者存入A[2],第四次选出次小者存入A[N-1],如此大小交替地选择,直到排序完成。要求: 1) 编写函数sort完成排序 2) 在主函数中完成数据的输入与结果的输出 6. 已知用两个单链表分别存储的两个字符串,均按递增次序排列。编程实现将这两个单链表归并为一个按数据域值递减次序排列的单链表。要求: 1) 单链表中每个结点只存放一个字符 2) 利用原链表中的结点空间存储归并后的单链表,不另外生成新链表 3) 单链表的建立写一函数create实现 4) 两个链表归并过程写一函数sub实现 5) 输出结果写一函数output实现 6) 主函数调用这三个函数完成程序功能
如下代码功能7不能正常实现保存功能,想把 case后面只保留简单的函数调用语句,其他的语句放到被调函数里,把功能3,4,5换一下方法
#include"stdio.h" #include"string.h" #include"stdlib.h" #define MAX 30 // 最多30人 typedef struct date // 定义日期类型 { int year; int month; int day; }DATE; typedef struct person // 定义教师类型 { int ID; // 工号 char Name[10]; // 姓名 char Sex; // 性别 DATE birthday; // 出生日期 float salary; // 基本工资 } Teacher; void mima(Teacher num[]);//密码 void displayMenu();//菜单 int Read(Teacher num[],int n);//录入 void Print(Teacher num[],int n);//输出 float SearchByID(Teacher num[],int n,int xID);//按工号查询工资 void Sort(Teacher num[],int n);//工资排序 float avg(Teacher num[],int n,float *max,float *min);//统计工资的最大值、最小值、平均值 void count(Teacher num[],int n,int *nan,int *nu);//按性别统计教师人数 void Save(Teacher num[],int n);//保存 void tuichu();//退出 int main() { Teacher num[MAX]; mima(num); return 0; } void mima(Teacher num[])//密码 { int i,m,t,n,xID,man,women; i=0; float aver,max,min,teachersalary; char mima[10]={0}; printf("请输入密码:\n"); for(i=1;i<2;i++) { scanf("%s",mima); if(strcmp(mima,"*a123a*")==0) { printf("登陆成功!\n"); break; } else { printf("密码输入错误,请重新输入(你还有两次机会):\n"); } } if(i==2) { for(i=2;i<3;i++) { scanf("%s",mima); if(strcmp(mima,"*a123a*")==0) { printf("登陆成功!\n"); break; } else { printf("密码输入错误,请重新输入(你还有一次机会):\n"); scanf("%s",mima); } } } if(i==3) { if(strcmp(mima,"*a123a*")==0) { printf("登陆成功!\n"); } else printf("登陆失败,程序退出。\n"); } int choice, flag = 0; while (flag == 0) { putchar('\n'); displayMenu(); printf("please input a digital(1-9)\n"); scanf("%d", &choice); if (choice >= 1 && choice <= 8) switch (choice) { case 1:printf("录入的老师人数:"); scanf("%d",&n); t=Read(num,n); if(t==1) { t=Read(num,n); } else { printf("输入结束!\n"); } break; case 2:Print(num,n); break; case 3:printf("按工号查询工资!\n"); printf("请输入教师工号:"); scanf("%d",&xID); t=SearchByID(num,n,xID); if(t!=-1) { printf("%10d%8s%6c%6d/%02d/%02d%10.2f\n",num[t].ID , num[t].Name , num[t].Sex , num[t].birthday.year , num[t].birthday.month , num[t].birthday.day , num[t].salary); } else { printf("没有该教师!\n"); } break; case 4:Sort(num,n); break; case 5:aver=avg(num,n,&max,&min); printf("aver=%f\n",aver); printf("max=%f\n",max); printf("min=%f\n",min); break; case 6:count(num,n,&man,&women); printf("男老师有%d人\n",man); printf("女老师有%d人\n",women); break; case 7:Save(num,n); break; case 8:tuichu(); break; default:printf("选项输入错误!\n"); } } } void displayMenu()//菜单 { printf("***********************\n"); printf("教师基本信息管理系统\n"); printf("***********************\n"); printf("请选择:\n"); printf("1: 录入 \n"); printf("2:输出 \n"); printf("3:按工号查询工资 \n"); printf("4:工资排序 \n"); printf("5:统计工资的最大值、最小值、平均值\n"); printf("6:按性别统计教师人数 \n"); printf("7:保存 \n"); printf("8:退出 \n"); } int Read(Teacher num[],int n) // 录入模块:输入教师的基本信息 { int i; for(i=0; i<=n; i++) { printf("输入教师的基本信息:(ID 姓名 性别 (出生日期)年 月 日 基本工资:)"); scanf("%ld", &num[i].ID); if(num[i].ID==-1) { return 0; exit(0); } scanf("%s", num[i].Name);//姓名 scanf(" %c", &num[i].Sex); //性别,注意%c前有空格 scanf("%d", &num[i].birthday.year);//出生年 scanf("%d", &num[i].birthday.month);//月 scanf("%d", &num[i].birthday.day);//日 scanf("%f", &num[i].salary);//基本薪资 } return 1; } void Print(Teacher num[],int n) // 输出模块:输出实际的教师基本信息 { int i; printf("输出教师的基本信息:\n"); for(i=0; i<n; i++) { printf("%10ld%8s%3c %ld/%02d/%02d%10.2f\n",num[i].ID , num[i].Name , num[i].Sex , num[i].birthday.year , num[i].birthday.month , num[i].birthday.day , num[i].salary); } } float SearchByID(Teacher num[],int n,int xID) // 按工号查询工资模块:查询与指定值xID相同的教师工资 { int i; for(i=0; i<n; i++) { if(num[i].ID ==xID) { return i; } } return -1; } void Sort(Teacher *p,int n) // 工资排序:按工资升序序排列 { int i,j; Teacher t; for(i=0; i < n - 1; i++){ for(j=0; j < n - i - 1; j++) { if(p[j].salary>p[j+1].salary) { t=p[j]; p[j]=p[j+1]; p[j+1]=t; } } } for(i=0; i<n; i++) { printf("%10d%8s%6c%6d/%02d/%02d%10.2f\n",p[i].ID ,p[i].Name ,p[i].Sex ,p[i].birthday.year ,p[i].birthday.month ,p[i].birthday.day ,p[i].salary); } } float avg(Teacher num[],int n,float *max,float *min) // 统计工资的最大值、最小值、平均值模块: { int i; float aver,sum=0; for(i=0;i<n;i++) { *max=num[0].salary; *min=num[0].salary; if(num[i].salary>*max) { *max=num[i].salary; } if(num[i].salary<*min) { *min=num[i].salary; } sum+=num[i].salary; } aver=sum/n; return aver; } void count(Teacher num[],int n,int *man,int *women) // 按性别统计教师人数模块:分别统计 { int i; for(i=0;i<n;i++) { if(num[i].Sex=='M') (*man)++; else (*women)++; } } void Save(Teacher num[],int n) // 保存模块:将教师信息写到数据文件中 { FILE *fp; int i,j; if((fp=fopen("teacherjibenxinxi.txt","a")) == NULL) //以添加方式打开文本文件 { printf("Failure to open teacher.txt!\n"); exit(0); } fprintf(fp,"教师工号 教师姓名 教师性别 出生日期 教师工资\n"); for(i=0; i<n; i++) { fprintf(fp,"%10d%8s%6c%6d/%02d/%02d%10.2f\n",num[i].ID , num[i].Name , num[i].Sex , num[i].birthday.year , num[i].birthday.month , num[i].birthday.day , num[i].salary); } fclose(fp); if((fp=fopen("teacherjibenxinxi.txt","r")) == NULL) //以读方式打开文本文件 { printf("Failure to open teacher.txt!\n"); exit(0); } for(i=0; i<n; i++) { fprintf(fp,"%10d%8s%6c%6d/%02d/%02d%10.2f\n",num[i].ID , num[i].Name , num[i].Sex , num[i].birthday.year , num[i].birthday.month , num[i].birthday.day , num[i].salary); } fclose(fp); printf("保存成功!\n"); } void tuichu() { printf("已退出"); exit(0); }
C文件怎么改写成java文件?
最近遇到一个棘手的问题,老板给了几个.unl格式的文件,文本打开全是乱码,说是要求用java读取解析,给了个C写的解析过程,可我不懂C语言。虽然有格式文档但是怎么解都解不出正确的内容来,哪位大神有能将C语言翻译成java呢? 或者说那位大神能使用java按照格式解析出二进制的内容,可以联系我哦,可以付钱买源码。 ``` #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <stdio.h> #include <time.h> #include <string.h> #include "billBinToAsc.h" #define BILL_VERSION "2017/07/03" #define BILL_SIZE 337 #define BILL_ASC_SIZE 2048 #define MAX_BILL_COUNT 10000 void getNowTime(char * strNow,size_t size) { time_t Now; struct tm * tm_time; Now = time(NULL); tm_time = localtime(&Now); strftime(strNow,size,"%Y-%m-%d %H:%M:%S",tm_time); } void printBill(const tag_bill * billdata,char * strBuf) { char temp[BILL_ASC_SIZE]; time_t t_time; struct tm * tm_time; *strBuf = 0; //话单ID sprintf((char *)&temp,"%d-%d|",billdata->call_id1,billdata->call_id2); strcat(strBuf,temp); sprintf((char *)&temp,"%d|",billdata->call_num); strcat(strBuf,temp); //主被叫 sprintf((char *)&temp,"%s",billdata->caller_no); int len = strlen(temp); for (int j=0;j<len;j++) { //if(temp[j] == '\r' || temp[j] == '\n') if(temp[j] == '\r'||temp[j] == '\n') { temp[j] = '\0'; } } len = strlen(temp); //temp[len] ='|'; char temp2[2]="|"; strcat(temp,temp2); strcat(strBuf,temp); sprintf((char *)&temp,"%s|",billdata->callee_no); strcat(strBuf,temp); //时间 t_time = billdata->wait_begin; tm_time = localtime(&t_time); strftime(temp,BILL_ASC_SIZE,"%Y-%m-%d %H:%M:%S|",tm_time); strcat(strBuf,temp); t_time = billdata->wait_end; tm_time = localtime(&t_time); strftime(temp,BILL_ASC_SIZE,"%Y-%m-%d %H:%M:%S|",tm_time); strcat(strBuf,temp); t_time = billdata->ack_begin; tm_time = localtime(&t_time); strftime(temp,BILL_ASC_SIZE,"%Y-%m-%d %H:%M:%S|",tm_time); strcat(strBuf,temp); t_time = billdata->ack_end; tm_time = localtime(&t_time); strftime(temp,BILL_ASC_SIZE,"%Y-%m-%d %H:%M:%S|",tm_time); strcat(strBuf,temp); t_time = billdata->call_begin; tm_time = localtime(&t_time); strftime(temp,BILL_ASC_SIZE,"%Y-%m-%d %H:%M:%S|",tm_time); strcat(strBuf,temp); t_time = billdata->call_end; tm_time = localtime(&t_time); strftime(temp,BILL_ASC_SIZE,"%Y-%m-%d %H:%M:%S|",tm_time); strcat(strBuf,temp); //模块信息 sprintf((char *)&temp,"%d|",billdata->serviceno); //operation_type_id strcat(strBuf,temp); sprintf((char *)&temp,"%d|",billdata->trkno); strcat(strBuf,temp); sprintf((char *)&temp,"%d|",billdata->trunkgroup_no); strcat(strBuf,temp); sprintf((char *)&temp,"%d|",billdata->module_no); strcat(strBuf,temp); //设备信息 sprintf((char *)&temp,"%d|",billdata->device_type); strcat(strBuf,temp); sprintf((char *)&temp,"%d|",billdata->device_no); strcat(strBuf,temp); sprintf((char *)&temp,"%s|",billdata->devicein); strcat(strBuf,temp); sprintf((char *)&temp,"%d|",billdata->call_type_id); strcat(strBuf,temp); //原因信息 sprintf((char *)&temp,"%d|",billdata->waitcause); strcat(strBuf,temp); sprintf((char *)&temp,"%d|",billdata->releasecause); strcat(strBuf,temp); //呼叫中心信息 sprintf((char *)&temp,"%d|",billdata->subccno); strcat(strBuf,temp); sprintf((char *)&temp,"%d|",billdata->vdn); strcat(strBuf,temp); //杂项 sprintf((char *)&temp,"%d|",billdata->mediatype); strcat(strBuf,temp); sprintf((char *)&temp,"%d|",billdata->uvid); strcat(strBuf,temp); sprintf((char *)&temp,"%d|",billdata->orgccno); strcat(strBuf,temp); sprintf((char *)&temp,"%u-%u|",billdata->org_call_id1,billdata->org_call_id2); strcat(strBuf,temp); //原始呼叫信息 sprintf((char *)&temp,"%s|",billdata->orgcalleeno); strcat(strBuf,temp); sprintf((char *)&temp,"%d|",billdata->orgserviceno); strcat(strBuf,temp); //级别信息 sprintf((char *)&temp,"%d|",billdata->serccno); strcat(strBuf,temp); sprintf((char *)&temp,"%d|",billdata->serservice); strcat(strBuf,temp); sprintf((char *)&temp,"%d|",billdata->userlevel); strcat(strBuf,temp); sprintf((char *)&temp,"%d|",billdata->usertype); strcat(strBuf,temp); //杂项 sprintf((char *)&temp,"%d|",billdata->callincause); strcat(strBuf,temp); sprintf((char *)&temp,"%d|",billdata->enterreason); strcat(strBuf,temp); sprintf((char *)&temp,"%d|",billdata->leavereason); strcat(strBuf,temp); sprintf((char *)&temp,"%d|",billdata->billinfo1); strcat(strBuf,temp); //上个设备信息 sprintf((char *)&temp,"%d|",billdata->preserviceno); strcat(strBuf,temp); sprintf((char *)&temp,"%d|",billdata->predevicetype); strcat(strBuf,temp); sprintf((char *)&temp,"%d|",billdata->predeviceno); strcat(strBuf,temp); sprintf((char *)&temp,"%s|",billdata->predevicein); strcat(strBuf,temp); //技能 sprintf((char *)&temp,"%d|",billdata->mediainfotype); strcat(strBuf,temp); sprintf((char *)&temp,"%d|",billdata->skillid); strcat(strBuf,temp); //int billinfo2; //int billinfo3; //int billinfo4; //char str1[31]; //char str2[25]; //int billinfo5; //int billinfo6; //后为添加的部分字段: sprintf((char *)&temp,"%d|",billdata->locationid); strcat(strBuf,temp); sprintf((char *)&temp,"%d|",billdata->billinfo2); strcat(strBuf,temp); sprintf((char *)&temp,"%d|",billdata->billinfo3); strcat(strBuf,temp); sprintf((char *)&temp,"%d|",billdata->billinfo4); strcat(strBuf,temp); sprintf((char *)&temp,"%d|",billdata->billinfo5); strcat(strBuf,temp); sprintf((char *)&temp,"%d|",billdata->str1); strcat(strBuf,temp); sprintf((char *)&temp,"%d|",billdata->str2); strcat(strBuf,temp); sprintf((char *)&temp,"%d|",billdata->billinfo6); strcat(strBuf,temp); sprintf((char *)&temp,"%d|",billdata->billinfo7); strcat(strBuf,temp); // sprintf((char *)&temp,"%d|",billdata->billinfo8); //strcat(strBuf,temp); // sprintf((char *)&temp,"%d|",billdata->billinfo9); //strcat(strBuf,temp); // sprintf((char *)&temp,"%d|",billdata->billinfo10); //strcat(strBuf,temp); //转换结束 strcat(strBuf,"\n"); } int main(int argc,char * argv[]) { const char * strSourceFileName; const char * strTargetFileName; const char * strLogFileName = "billConvt.log"; char strBillAsc[BILL_ASC_SIZE]; char strNowDate[1000]; FILE * fd_s,* fd_t,* fd_log; tag_bill tagBillData; int iReadCount; getNowTime(strNowDate,sizeof(strNowDate)); //command handle if(argc != 3){ printf("%d command error: [usuage] command sourcefilename targetfilename\n",argc); return -1; } //strSourceFileName = argv[1]; //strTargetFileName = argv[2]; strSourceFileName = "H:\\UNL\\Prm20190716_0101_000361.unl";//argv[1]; strTargetFileName = "H:\\parseData\\Prm20190716_0101_000361.dat";// argv[2]; //fprintf("%s=",argv[0]); //open Source file fd_log = fopen(strLogFileName,"a"); if(fd_s == NULL){ fprintf(fd_log,"[%s]Cannot Open SourceFileName:%s\n",strNowDate,strSourceFileName); return -1; } //key parameter check /* if(sizeof(tag_bill) < BILL_SIZE){ fprintf(fd_log,"[%s][error] tag_bill size error![%d][%d]\n",strNowDate,sizeof(tag_bill),BILL_SIZE); return -1; } */ //open Source file fd_s = fopen(strSourceFileName,"r"); if(fd_s == NULL){ fprintf(fd_log,"[%s]Cannot Open SourceFileName:%s\n",strNowDate,strSourceFileName); return -1; } //open Target file fd_t = fopen(strTargetFileName,"w"); if(fd_s == NULL){ fprintf(fd_log,"[%s]Cannot Open TargetFileName:%s\n",strNowDate,strTargetFileName); return -1; } //读数据 int i = 0; for(i=0;i<=MAX_BILL_COUNT && fread((tag_bill*)&tagBillData,BILL_SIZE,1,fd_s) == 1;i++) { printBill(&tagBillData,(char *)&strBillAsc); fprintf(fd_t,"%d|",i); fputs(strBillAsc,fd_t); } //写日志 fprintf(fd_log,"[%s] Convert SourceFile:%s into TargetFile:%s OK! record:%d\n",\ strNowDate,strSourceFileName,strTargetFileName,i); //关闭文件 if(fd_s != NULL) fclose(fd_s); if(fd_t != NULL) fclose(fd_t); if(fd_log != NULL) fclose(fd_log); return 0; } (下面是定义的集合文件) #pragma pack(push,1) typedef struct { int head; int call_id1; int call_id2; int call_num; char caller_no[26]; char callee_no[26]; int wait_begin; int wait_end; int ack_begin; int ack_end; int call_begin; int call_end; int serviceno; int trkno;// int module_no;//------14 int device_type; int device_no; char devicein[26]; int call_type_id; int waitcause; int releasecause; short subccno; short vdn; short mediatype; int uvid; short trunkgroup_no; char orgcalleeno[26]; short orgccno; int org_call_id1; int org_call_id2;//14 int orgserviceno; short serccno; short serservice; unsigned char userlevel;//一字节整形 unsigned char usertype;//一字节整形 short callincause; unsigned char enterreason;//一字节整形 unsigned char leavereason;//一字节整形 int billinfo1; int preserviceno; int predevicetype; int predeviceno; char predevicein[26]; int mediainfotype; short skillid; short locationid; int billinfo2; int billinfo3; int billinfo4; int billinfo5; char str1[31]; char str2[25]; short billinfo6; unsigned char billinfo7; //short billinfo8; //unsigned char billinfo9; //short billinfo10; }tag_bill; #pragma pack(pop) ```
double数组的第一个值调用函数中和调用函数后不一样?
请教大家一个C语言问题 这是一个txt 内容: 0.992 1.029 1.074 1.120 1.008 1.018 0.974 0.980 0.982 0.957 0.862 0.975 1.049 1.047 1.038 0.959 1.011 1.017 1.007 0.963 我用fscanf方法读取成double类型的数组 并且在读取的函数中打印了一次 在函数中打印出来是正常的 但是一旦读取成功 数组的第一个值就变了 从0.992变成了0.4 为什么会出现这种情况呢? 在函数中打印出来是这样的:0.992 1.029 1.074 1.120...... 读取完成后,打印出来是这样:0.400 1.029 1.074 1.120...... 第一个数变化了。 这是读取的方法: int readENSEMBLEtxt_to_doublearray(double a[]) { //double v[20];//开一个足够大的数组。 int i = 0,j; FILE *fpensem;//文件指针 fpensem = fopen(BGC_PATH, "r");//以文本方式打开文件。 if(fpensem == NULL) //打开文件出错。 return -1; //while(fscanf(fpensem, " %lf", &a[i]) != EOF) //读取数据到数组,直到文件结尾(返回EOF) // i++; //fclose(fpensem);//关闭文件 while(!feof(fpensem)) { fscanf(fpensem,"%lf",&a[i]); ++i; } fclose(fpensem);//关闭文件 for(j = 0; j < i; j ++)//循环输出数组元素。 { printf("%lf ", a[j]); } printf("\r\n"); return 0; } 下面是相关的调用过程: double ensemble[20]={0}; readENSEMBLEtxt_to_doublearray(ensemble); 如果 我把这个函数和调用过程,从我原来的程序中,抽出来,结果是对的。但是在我的程序中,一模一样的内容,出来后第一个数字变化了,这里是在Visual Studio里面。BGC_PATH,是我定义的一个宏:#define BGC_PATH "F:\\Biome-BGC\\biomebgc-4.2\\biomebgc-4.2\\generateEnsemble.txt"。原来的程序是个比较大的生态模型。
救救孩子吧!如何解决读取txt文件出现索引超出了数组的范围的问题
#include<stdio.h> #include<stdlib.h> void main() { typedef struct LNode { char name[6]; int no; int yw; int sx; int yy; struct LNode* next; }LinkList; struct NameNo { int no; int yw; int sx; int total; char name[6]; }st[10]; FILE* fp, * fp1; char ch, sname[6]; int x, i, j; NameNo tmp; LinkList* p, * s; printf("\n"); printf("-------------------------------"); printf("学生成绩管理系统"); printf("--------------------------------"); printf("\n\n"); printf("在您的C盘根目录下是否有cj1.txt和cj2.txt文件?如果有请输入1,"); printf("否则输入0;如果没有,那么程序将终止!1 or 0?"); scanf("%d", &i); if (i == 0) return; printf("\n\n"); printf("对cj1.txt和cj2.txt进行合成请按''"); scanf("%d", &i); if (i != 1) return; printf("正在把cj1.txt和cj2.txt中的数据进行合并\n"); printf("......\n.....\n....\n...\n..\n.\n"); if ((fp = fopen("c:\\cj1.txt", "rt")) == NULL) //从文本文件cj1.txt中读取数据传向cj3.txt { printf("无cj1.txt文本文件,程序结束。\n"); return; } fp1 = fopen("c:\\cj3.txt", "wt"); ch = fgetc(fp); while (ch != EOF) { fputc(ch, fp1); ch = fgetc(fp); } fclose(fp1); fclose(fp); if ((fp = fopen("c:\\cj2.txt", "rt")) == NULL) //从文本文件cj2.txt中读取数据接到cj3.txt的后面 { printf("无cj12.txt文本文件,程序结束。\n"); return; } fp1 = fopen("c:\\cj3.txt", "a"); for (i = 0; i < 37; i++) fgetc(fp); ch = fgetc(fp); while (ch != EOF) { fputc(ch, fp1); ch = fgetc(fp); } fclose(fp1); fclose(fp); printf("合并成功!现在你可以在C盘根目录下看到一个cj3.txt文件\n"); printf("\n\n"); p = (LinkList*)malloc(sizeof(LinkList)); p->next = NULL; fp = fopen("c:\\cj3.txt", "rt");//从合成后的cj3.txt读取数据,生成链表 for (i = 0; i < 36; i++) fgetc(fp); ch = fgetc(fp); while (ch != EOF) { s = (LinkList*)malloc(sizeof(LinkList)); fgets(s->name, 6, fp); for (i = 0; i < 5; i++) fgetc(fp); x = fgetc(fp) - 48; x = x * 10 + fgetc(fp) - 48; s->no = x; for (i = 0; i < 5; i++) fgetc(fp); x = fgetc(fp) - 48; x = x * 10 + fgetc(fp) - 48; s->yw = x; for (i = 0; i < 5; i++) fgetc(fp); x = fgetc(fp) - 48; x = x * 10 + fgetc(fp) - 48; s->sx = x; for (i = 0; i < 5; i++) fgetc(fp); x = fgetc(fp) - 48; x = x * 10 + fgetc(fp) - 48; s->yy = x; s->next = p->next; p->next = s; ch = fgetc(fp); } fclose(fp); printf("对cj3.txt中有不及格的学生信息生成cj4.txt请按''"); scanf("%d", &i); if (i != 1) return; printf("正在生成cj4.txt\n"); printf("......\n.....\n....\n...\n..\n.\n"); if (i == 1) fp = fopen("c:\\cj4.txt", "wt");//把三科成绩中有补考的学生信息放入cj4.txt fputs("姓 名 学号 语文 数学 英语", fp); fclose(fp); fp = fopen("c:\\cj4.txt", "a"); s = p->next; while (s != NULL) { if (s->yw < 60 || s->sx < 60 || s->yy < 60) { ch = '\n'; fputc(ch, fp); fputs(s->name, fp); for (i = 0; i < 5; i++) { ch = ' '; fputc(ch, fp); } ch = s->no / 10 + 48; fputc(ch, fp); ch = s->no - (s->no / 10) * 10 + 48; fputc(ch, fp); for (i = 0; i < 5; i++) { ch = ' '; fputc(ch, fp); } ch = s->yw / 10 + 48; fputc(ch, fp); ch = s->yw - (s->yw / 10) * 10 + 48; fputc(ch, fp); for (i = 0; i < 5; i++) { ch = ' '; fputc(ch, fp); } ch = s->sx / 10 + 48; fputc(ch, fp); ch = s->sx - (s->sx / 10) * 10 + 48; fputc(ch, fp); for (i = 0; i < 5; i++) { ch = ' '; fputc(ch, fp); } ch = s->yy / 10 + 48; fputc(ch, fp); ch = s->yy - (s->yy / 10) * 10 + 48; fputc(ch, fp); s = s->next; } else s = s->next; } fclose(fp); printf("生成成功!现在你可以在C盘根目录下看到一个cj4.txt文件"); printf("\n\n"); s = p->next;//将学生信息从链表复制到数组中 for (i = 0; i < 10; i++) { st[i].no = s->no; st[i].yw = s->yw; st[i].sx = s->sx; st[i].total = s->yw + s->sx + s->yy; for (j = 0; j < 7; j++) st[i].name[j] = s->name[j]; s = s->next; } printf("用直接插入法排序请按'':"); scanf("%d", &i); printf("\n\n"); if (i == 1) { for (i = 1; i < 10; i++)//直接插入法排序 { tmp = st[i]; j = i - 1; while (j >= 0 && tmp.total > st[j].total) { st[j + 1] = st[j]; j--; } st[j + 1] = tmp; } printf(" 直接插入法排序后总分从大到小排序为\n"); printf("\n\n"); printf("姓 名 学号 语文 数学 英语 总分\n"); for (i = 0; i < 10; i++) { if (st[i].no < 10) { printf("%s ", st[i].name); printf("%d", 0); printf("%d ", st[i].no); printf("%d ", st[i].yw); printf("%d ", st[i].sx); printf("%d ", st[i].total - st[i].yw - st[i].sx); printf("%d\n", st[i].total); printf("\n"); } else { printf("%s ", st[i].name); printf("%d ", st[i].no); printf("%d ", st[i].yw); printf("%d ", st[i].sx); printf("%d ", st[i].total - st[i].yw - st[i].sx); printf("%d\n", st[i].total); printf("\n"); } } } printf("将排好序的数组打乱\n"); printf("\n"); s = p->next;//将排好序的数组打乱,从新用冒泡法排序 for (i = 0; i < 10; i++) { st[i].no = s->no; st[i].yw = s->yw; st[i].sx = s->sx; st[i].total = s->yw + s->sx + s->yy; for (j = 0; j < 7; j++) st[i].name[j] = s->name[j]; s = s->next; } printf("用冒泡法排序请按'':"); scanf("%d", &i); printf("\n\n"); if (i == 1) { for (i = 0; i < 9; i++)//冒泡法排序 { for (j = 9; j > i; j--) if (st[j].total > st[j - 1].total) { tmp = st[j]; st[j] = st[j - 1]; st[j - 1] = tmp; } } printf(" 冒泡法排序后总分从大到小排序为\n"); printf("\n\n"); printf("姓 名 学号 语文 数学 英语 总分\n"); for (i = 0; i < 10; i++) { if (st[i].no < 10) { printf("%s ", st[i].name); printf("%d", 0); printf("%d ", st[i].no); printf("%d ", st[i].yw); printf("%d ", st[i].sx); printf("%d ", st[i].total - st[i].yw - st[i].sx); printf("%d\n", st[i].total); printf("\n"); } else { printf("%s ", st[i].name); printf("%d ", st[i].no); printf("%d ", st[i].yw); printf("%d ", st[i].sx); printf("%d ", st[i].total - st[i].yw - st[i].sx); printf("%d\n", st[i].total); printf("\n"); } } } printf("\n"); printf("请输入你要查找的学生姓名:(注意:如果名字为两个字,则中间用两个空格!)\n"); do { x = 1; if (i == 1) printf("输入姓名:"); getchar(); for (i = 0; i < 7; i++) sname[i] = getchar(); for (i = 0; i < 10; i++)//在数组中顺序查找 { for (j = 0; st[i].name[j] == sname[j]; j++) {} if (j == 6) { printf(" 数组中查找结果"); printf("\n\n"); printf("姓 名 学号 语文 数学 英语 总分\n"); printf("%s", st[i].name); printf(" %d", st[i].no); printf(" %d", st[i].yw); printf(" %d", st[i].sx); printf(" %d", st[i].total - st[i].yw - st[i].sx); printf(" %d\n\n", st[i].total); x = 0; } } if (x != 0) printf(" 查无此人!\n"); s = p->next; while (s != NULL)//在链表中顺序查找 { for (i = 0; s->name[i] == sname[i]; i++) {} if (i == 6) { printf(" 链表中查找结果"); printf("\n\n"); printf("姓 名 学号 语文 数学 英语 总分\n"); printf("%s", s->name); printf(" %d", s->no); printf(" %d", s->yw); printf(" %d", s->sx); printf(" %d", s->yy); printf(" %d\n\n", s->yw + s->sx + s->yy); x = 0; } s = s->next; } if (x != 0) printf(" 查无此人!\n"); i = 0; printf("继续查找请按''"); scanf("%d", &i); } while (i == 1); printf("\n\n"); printf("-----------------------------谢谢使用!--------------------------------\n\n"); } 请问如何解决索引超出了数组的范围这一问题 现有学生成绩信息文件1(1.txt),内容如下 姓名 学号 语文 数学 英语 张明明 01 67 78 82 李成友 02 78 91 88 张辉灿 03 68 82 56 王露 04 56 45 77 陈东明 05 67 38 47 学生成绩信息文件2(2.txt),内容如下: 姓名 学号 语文 数学 英语 陈果 31 57 68 82 李华明 32 88 90 68 张明东 33 48 42 56 李明国 34 50 45 87 陈道亮 35 47 58 77 …. .. .. .. … ![图片说明](https://img-ask.csdn.net/upload/201912/22/1577019414_694126.png)
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
【JSON解析】浅谈JSONObject的使用
简介 在程序开发过程中,在参数传递,函数返回值等方面,越来越多的使用JSON。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,同时也易于机器解析和生成、易于理解、阅读和撰写,而且Json采用完全独立于语言的文本格式,这使得Json成为理想的数据交换语言。 JSON建构于两种结构: “名称/值”对的集合(A Collection of name/va...
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
只因接了一个电话,程序员被骗 30 万!
今天想给大家说一个刚刚发生在我身边的一起真实的诈骗经历,我的朋友因此被骗走30万。注:为了保护当事人隐私,部分情节进行了修改。1平安夜突来的电话开始以为就像普通的诈骗一样,想办法让你把钱...
我一个37岁的程序员朋友
周末了,人一旦没有点事情干,心里就瞎想,而且跟几个老男人坐在一起,更容易瞎想,我自己现在也是 30 岁了,也是无时无刻在担心自己的职业生涯,担心丢掉工作没有收入,担心身体机能下降,担心突...
python自动下载图片
近日闲来无事,总有一种无形的力量萦绕在朕身边,让朕精神涣散,昏昏欲睡。 可是,像朕这么有职业操守的社畜怎么能在上班期间睡瞌睡呢,我不禁陷入了沉思。。。。 突然旁边的IOS同事问:‘嘿,兄弟,我发现一个网站的图片很有意思啊,能不能帮我保存下来提升我的开发灵感?’ 作为一个坚强的社畜怎么能说自己不行呢,当时朕就不假思索的答应:‘oh, It’s simple. Wait for me for a ...
一名大专同学的四个问题
【前言】   收到一封来信,赶上各种事情拖了几日,利用今天要放下工作的时机,做个回复。   2020年到了,就以这一封信,作为开年标志吧。 【正文】   您好,我是一名现在有很多困惑的大二学生。有一些问题想要向您请教。   先说一下我的基本情况,高考失利,不想复读,来到广州一所大专读计算机应用技术专业。学校是偏艺术类的,计算机专业没有实验室更不用说工作室了。而且学校的学风也不好。但我很想在计算机领...
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
Java 14 都快来了,为什么还有这么多人固守Java 8?
从Java 9开始,Java版本的发布就让人眼花缭乱了。每隔6个月,都会冒出一个新版本出来,Java 10 , Java 11, Java 12, Java 13, 到2020年3月份,...
达摩院十大科技趋势发布:2020 非同小可!
【CSDN编者按】1月2日,阿里巴巴发布《达摩院2020十大科技趋势》,十大科技趋势分别是:人工智能从感知智能向认知智能演进;计算存储一体化突破AI算力瓶颈;工业互联网的超融合;机器间大规模协作成为可能;模块化降低芯片设计门槛;规模化生产级区块链应用将走入大众;量子计算进入攻坚期;新材料推动半导体器件革新;保护数据隐私的AI技术将加速落地;云成为IT技术创新的中心 。 新的画卷,正在徐徐展开。...
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
讲真,这两个IDE插件,可以让你写出质量杠杠的代码
周末躺在床上看《拯救大兵瑞恩》 周末在闲逛的时候,发现了两个优秀的 IDE 插件,据说可以提高代码的质量,我就安装了一下,试了试以后发现,确实很不错,就推荐给大家。 01、Alibaba Java 代码规范插件 《阿里巴巴 Java 开发手册》,相信大家都不会感到陌生,其 IDEA 插件的下载次数据说达到了 80 万次,我今天又贡献了一次。嘿嘿。 该项目的插件地址: https://github....
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
【程序人生】程序员接私活常用平台汇总
00. 目录 文章目录00. 目录01. 前言02. 程序员客栈03. 码市04. 猪八戒网05. 开源众包06. 智城外包网07. 实现网08. 猿急送09. 人人开发10. 开发邦11. 电鸭社区12. 快码13. 英选14. Upwork15. Freelancer16. Dribbble17. Remoteok18. Toptal19. AngelList20. Topcoder21. ...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
Idea 中最常用的10款插件(提高开发效率),一定要学会使用!
学习使用一些插件,可以提高开发效率。对于我们开发人员很有帮助。这篇博客介绍了开发中使用的插件。
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
立即提问