C语言fopen打开文件失败

一个单链表创建学生信息的作业,要求要用文件的输入输出。

打全部路径会出现如图的错误。

打“C:\\student_info.txt”也不行。

把文件移到project8的文件夹下面打“student_info.txt”也不行。

已确定文件在文件夹内是存在的。F11调试确定就是fopen那块儿出的问题

求问怎么改......崩溃

图片说明
#define _CRT_SECURE_NO_DEPRECATE
#include
#include
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int ElemType;
typedef int Status;
FILE fp;
/
①单链表数据结构定义*/
typedef struct
{
int num; //学号
//char name[20]; //姓名
//int sex; //性别
//int dorm; //宿舍
//int tel; //电话
}Student;
//结点定义
typedef struct LNode
{
Student data;
struct LNode next;
}LNode;
//链表定义
typedef struct
{
LNode
head; //指向头结点的指针
int length; //链表长度
}LinkList;
/*②单链表基本操作接口定义*/
//初始化链表:创建头结点,给L字段赋初值
//返回一个空的单链表
Status InitList(LinkList &L);

//初始条件:线性表L已经初始化
//采用头插法创建一个单链表,元素类型为整形,输入-9999时结束
Status CreateFromHead(LinkList &L);

//初始条件:线性表L已经初始化
//采用尾插法创建一个单链表,元素类型为整形,输入-9999时结束
Status CreateFromTail(LinkList &L);

//初始条件:线性表L已经存在
//打印出所有元素
void PrintElem(LinkList L);

//初始条件:线性表L已经存在
//查找第i个结点,若找到(1≤i≤n),则由e返回其值
Status GetElem_L(LinkList L, int i, ElemType &e);

//初始条件:线性表L已经存在
//在单链线性表L的第i个元素之前插入元素e
Status ListInsert_L(LinkList &L, int i, ElemType e);

//初始条件:线性表L已经存在
//删除第i个元素,并由e返回其值
Status ListDelete_L(LinkList &L, int i, ElemType &e);
int main()
{
LinkList L;
InitList(L);
CreateFromHead(L);
PrintElem(L);
system("pause");
}

/*③部分单链表操作的实现函数*/
Status InitList(LinkList &L) //初始化链表
{
L.head = (LNode*)malloc(sizeof(LNode));
if (!L.head)exit(OVERFLOW);
L.length = 0;
L.head->next = NULL;
return OK;
}
//初始条件:线性表L已经初始化
//采用头插法创建一个单链表,元素类型为整形,输入-9999时结束
Status CreateFromHead(LinkList &L)
{
LNode s;
int flag = 1;
int e;
L.head = (LNode
)malloc(sizeof(LNode));
L.head->next = NULL;
while (flag)
{
fp = fopen("C:\Users\解诗雨\source\student_info.txt", "r+");
if (fp==NULL)
{
printf("打不开\n");
return OK;
}
fscanf(fp,"%d", &e);
if (e)
{
s = (LNode*)malloc(sizeof(LNode));
s->data.num = e;
s->next = L.head->next;
L.head->next = s;
++L.length;
}
else flag = 0;
fclose(fp);
}
return OK;
}

//初始条件:线性表L已经存在
//打印出所有元素
void PrintElem(LinkList L)
{
LNode* p;
p = L.head->next;
printf("当前的结点数为:%d\n", L.length);
while (p)
{
printf("%4d ", p->data.num);
p = p->next;
}
printf("\n");
}

文本:
图片说明

因为现在还在创建链表其他还没弄完...

2个回答

全路径 '\'全部换为 '/' 或者'\'

C:\Users\****\source\student_info.txt
C:/Users/****/source/student_info.txt

weixin_45862553
谢长留 回复J4cks0n: 调试好了!谢谢宁!
4 个月之前 回复
J4cks0n
J4cks0n 那你调试看看,看卡在哪一步,报什么问题
4 个月之前 回复
weixin_45862553
谢长留 不好使哎......运行出来黑框后就没反应了 没有输出的数字也输不进去什么
4 个月之前 回复

错了,需要转义符猜行,有“\”的地方全部换成“\”就可以了。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于c语言 fopen触发断点问题,求大神解惑
数据结构作业要构造huffman树并输出文件,但是过程遇到问题,困了好几天没能解决。 ![图片说明](https://img-ask.csdn.net/upload/201910/15/1571149416_706766.png)![图片说明](https://img-ask.csdn.net/upload/201910/15/1571149429_15842.png) 如图,我尝过许多方法,文件名字符串双斜杠试过,作为变量传入也试过,但是都会发生这样的情况。但是更让我难以理解的是偶尔会成功打开并且成功写入,这就让我不知道要从哪里找问题了。 部分代码如下,程序还未完成但是可以调试部分功能了 ``` #include<stdio.h> #include<stdlib.h> #include<string.h> #define ERROR 0 #define OK 1 typedef int status; typedef struct { unsigned int weight; unsigned parent, lchild, rchild; }HTNode, *HuffmanTree; typedef char **HuffmanCode; void Get_Info(int *n, char **charset, int **w) { printf("请输入字符集大小:"); scanf("%d", n); getchar(); int i, m = 2 * (*n) - 1; *charset = (char*)malloc((*n) * sizeof(char)); *w = (int*)malloc((*n) * sizeof(int)); for (i = 0; i < *n; i++) { printf("请输入第%d个字符及其权值(中间用空格隔开):", i + 1); scanf("%c", (*charset)+i); getchar(); scanf("%d", (*w)+i); getchar(); } } void Select(HuffmanTree HT, int m, int *s1, int *s2) { //s1.w<s2.w int i, temp, tag = 1; HuffmanTree p; for (i = 1, p = HT + 1; i <= m; p++, i++) { if (p->parent == 0 && tag == 1) { *s1 = i; tag++; } else if (p->parent == 0 && tag == 2) { //没加else,导致同时执行 *s2 = i; break; } } if (HT[*s1].weight > HT[*s2].weight) { temp = *s1; *s1 = *s2; *s2 = temp; } for (i = 1, p = HT + 1; i <= m; p++, i++) { if (p->weight < HT[*s1].weight && p->parent == 0) { *s2 = *s1; *s1 = i; } else if (p->weight < HT[*s2].weight && p->weight != HT[*s1].weight && p->parent == 0) *s2 = i; } } void CreateHT(HuffmanTree *HT, int n, char *charset, int* w, char treefilename[]) { int i, m; int s1, s2; FILE *Huffman; HuffmanTree p; //初始化 m = 2 * n - 1; (*HT) = (HuffmanTree)malloc((m + 1) * sizeof(HuffmanCode)); for (p = *HT + 1, i = 1; i <= m; i++, p++) { p->weight = 0; p->parent = 0; p->lchild = 0; p->rchild = 0; } for (p = *HT + 1, i = 1; i <= n; i++, p++, w++) p->weight = *w; //建Huffman树 for (i = n + 1; i <= m; i++) { //调试分析1:写成i = 1,发生错误。 Select(*HT, i - 1, &s1, &s2); /*调试分析3:刚开始设置为i,导致select函数多找一位,Huffman树生成错误,应为i-1*/ (*HT)[i].weight = (*HT)[s1].weight + (*HT)[s2].weight; (*HT)[i].lchild = s1; (*HT)[i].rchild = s2; (*HT)[s1].parent = i; (*HT)[s2].parent = i; } //输出到Huffman文件 Huffman = fopen(treefilename, "w"); fprintf(Huffman, "W P L R\n"); for (i = 1; i <= m; i++) fprintf(Huffman, "%d %d %d %d\n", (*HT)[i].weight, (*HT)[i].parent, (*HT)[i].lchild, (*HT)[i].rchild); fclose(Huffman); } void Coding(HuffmanTree HT,HuffmanCode *HC, int n) { int start; unsigned int c, f; char *cd; (*HC) = (HuffmanCode)malloc((n + 1) * sizeof(char*)); cd = (char*)malloc(n * sizeof(char)); cd[n - 1] = '\0'; for (int i = 1; i <= n; ++i) { start = n - 1; for (c = i, f = HT[i].parent; f != 0; c = f, f = HT[f].parent) { if (HT[f].lchild == c) cd[--start] = '0'; else cd[--start] = '1'; } (*HC)[i] = (char*)malloc((n - start) * sizeof(char)); strcpy((*HC)[i], &cd[start]); } free(cd); } status CodeFile(HuffmanCode HC, char *textfilename, char *codefilename, char *charset) { FILE *CodeFile, *TextFile; char text[1000],code[5000]; int length = 0, i, j; TextFile = fopen(textfilename, "r"); if (TextFile == NULL) { printf("正文文件不存在。请重试\n"); return ERROR; } while ((text[length] = fgetc(TextFile)) != EOF) length++; fclose(TextFile); CodeFile = fopen(codefilename, "w"); for (i = 0; i < length; i++) { j = 0; while (charset[j] != text[i]) j++; j++; fputs(HC[j], CodeFile); } fclose(CodeFile); return OK; } status Get_HT(HuffmanTree *HT, char *treefilename, int *n) { int status; char garbage[100]; FILE *Huffman; HuffmanTree p ,q; (*n) = 0; p = (HuffmanTree)malloc(sizeof(HuffmanCode)*2); Huffman = fopen(treefilename, "r"); if (Huffman == NULL) { printf("文件不存在!"); status = ERROR; } else { (*HT) = (HuffmanTree)malloc(sizeof(HTNode)); for (int i = 0; i < 100;i++) { fgets(garbage, 37, Huffman); puts(garbage); printf("*%d*", i); } while ((fscanf(Huffman ,"%d %d %d %d", &(p[*n+1].weight), &(p[*n + 1].parent), &(p[*n + 1].lchild), &(p[*n + 1].rchild)))!=EOF) {//eof标识文件输入结束 (*n)++; printf("%d %d %d %d\n", p[*n + 1].weight, p[*n + 1].parent, p[*n + 1].lchild, p[*n + 1].rchild); p = (HuffmanTree)realloc(p, sizeof(HuffmanCode)*(*n + 2)); } (*HT) = p; status = OK; } return status; } int main() { char *charset, treefilename[40], codefilename[40], textfilename[40], c; int i, n, *w, status; int op; HuffmanTree HT = NULL; HuffmanCode HC = NULL; printf("姓名:陈志涛 学号:2018051234 时间:2019/10/10\n"); printf("=======================Huffman编码=======================\n"); printf("操作说明:请输入操作序号,并根据提示输入\n"); printf("菜 单:1、构建Huffman树\n"); printf(" 2、编码\n"); printf(" 3、译码\n"); printf(" 4、退出程序\n"); do { printf("\n>>>请输入操作序号:"); scanf("%d", &op); getchar(); switch (op){ case 1: Get_Info(&n, &charset, &w); printf("请输入Huffman树的文件存储地址:"); gets_s(treefilename); CreateHT(&HT, n, charset, w, treefilename); printf("Huffman树构建并保存成功。\n"); break; case 2: if (HT == NULL) { printf("当前未构建Huffman树,是否从文件中读取(Y/N)?"); scanf("%c", &c); getchar(); if (c == 'Y' || c == 'y') { printf("请输入Huffman文件存储地址:"); gets_s(treefilename); status = Get_HT(&HT, treefilename, &n); if (status == ERROR) { printf("获取Huffman树失败,请检查。"); break; } } else break; } Coding(HT, &HC, n); printf("请输入正文文件的存储地址:"); gets_s(textfilename); printf("请输入Huffman编码的目标存储地址:"); gets_s(codefilename); CodeFile(HC, textfilename, codefilename, charset); break; } printf("\n"); } while (1); system("pause"); return 0; } ``` 希望有好心人帮帮忙解惑
C语言拷贝大文件问题?
``` #include<stdio.h> #pragma warning(disable:4996) #include<time.h> int main(void) { unsigned int start = time(NULL); char arr[1024]; FILE * fp = fopen("D:\\1.avi", "rb"); FILE * fp1 = fopen("D:\\2.avi", "wb"); if (!fp) { printf("文件打开失败!"); return -1; } while (!feof(fp)) //如果文件结束返回非0值,否则返回0; { memset(arr, 0, 1024); fgets(arr, 1024, fp); fputs(arr, fp1); } fclose(fp); fclose(fp1); unsigned int end = time(NULL); printf("%d(s)\n", end - start); return 0; } ``` 为什么用上面fgets和fputs拷贝一个视频文件,300多兆的视频只能拷贝80多兆,而用fgets、fputs与fread、fwrite都能够完全拷贝下来。上面代码哪错了吗?
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 } ```
c语言文件操作函数相关问题
while(!feof(p))的循环中可以嵌套fopen(fp)函数吗?为什么总是提示fp文件打开失败?
文件的读写出现错误,导致文件信息无法写入到程序中
此部分函数如下 ```//提取文件信息函数 void draw() { mess *p; system("cls"); fp=fopen("d:\\stu.txt","rb+"); //<<-- if(fp==NULL) { printf("打开失败,文件不存在。\n"); fclose(fp); system("pause"); system("cls"); return; } fseek(fp,0,SEEK_SET); while(!feof(fp)) { p=(mess*)malloc(sizeof(mess)); fscanf(fp,"%ld %s %s %d %d %s %s %s", &p->number,p->name,p->sex,&p->year,&p->month,p->add, p->phone,p->mail); p->next=head; head=p; } fclose(fp); system("pause"); system("cls"); return; } ```![图片说明](https://img-ask.csdn.net/upload/202003/03/1583227121_433753.png)
C语言 单词卡字母排序和随机兼抽取
![图片说明](https://img-ask.csdn.net/upload/201911/25/1574618736_915260.png) 头文件 这下写了 要求是 一个英语字典功能 抽取单词 第一个选择 多少秒切换单词 第二个选择 从那个文件选择 第三个选择 1字典排序 2随机排序 麻烦哪位大佬写写 谢谢 我的代码这样子 铁定是废的。 头文件 ``` #include <stdio.h> #include <string.h> #include <stdlib.h> #define MAX_CHAR 20 // 最大字符 #define MAX_NUM 200 // 单词的最大个数 ``` void SFC()// Select Flash Card 闪光卡 { char b1[20]; //数组 char sp //速度 FILE *fp; //文件指针 ``` int choose;// printf(" 1.速度(秒)\n" ); // scanf("%s",sp); printf(" 2.文件名(一次)\n"); // scanf("%s",fp); while(choose) { fp=fopen("*p.txt","r");//打开指针文件 if(!fp) { printf("\n打开文件*fp.txt失败!"); //如果没有找到文件,则打印“失败” } } while(1) //决定那种方式展示 { pintf("字母排序:1 随机排序:2 \n"); scanf("%d",&item); switch(choose) { case 1: 字母排序();writefile();break; // 字母排序 case 2: 随机排序();writefile();break; // 随机排序 } } ``` ```
C语言关于加密解密过程?
加密过程 ``` #include<stdio.h> #pragma warning(disable:4996) int main(void) { FILE * fp1 = fopen("D:\\a.txt", "r"); FILE * fp2 = fopen("D:\\b.txt", "w"); if (!fp1) { printf("文件打开失败"); return -1; } char ch; while ((ch = fgetc(fp1)) != EOF) { ch++; fputc(ch, fp2); } fclose(fp1); fclose(fp2); return 0; } ``` ``` 我的a.txt里面的文本是:玄幻小说 ``` 这是解密过程 ``` #include<stdio.h> #pragma warning(disable:4996) int main(void) { FILE * fp2 = fopen("D:\\b.txt", "r"); FILE * fp3 = fopen("D:\\c.txt", "w"); if (!fp2) { printf("文件打开失败"); return -1; } char ch; while ((ch = fgetc(fp2)) != EOF) { ch--; fputc(ch, fp3); } fclose(fp2); fclose(fp3); return 0; } ``` 为什么在c.txt中输出的是:? ,输出其他东西都好使,就玄幻小说这四个字输出的是问号。
c语言为什么fread读取失败
#include <stdio.h> #include <string.h> #include <stdlib.h> #define STUDLEN sizeof(student) typedef struct _student { char name[10]; char sex[5]; float weight; float high; struct _student *next; }student; void Free(student *head); void input() { student *head=NULL,*p,*ptemp,*wpoint; char name[10],contin[5]; char sex[5]; float weight; float high; FILE *fp=fopen("student.data","ab+"); if(fp==NULL) { printf("打开文件失败\n"); exit(1); } do{ printf("输入学生姓名:"); scanf("%s",name); printf("输入性别:"); scanf("%s",sex); printf("输入体重:"); scanf("%f",&weight); printf("输入身高:"); scanf("%f",&high); p=(student *)malloc(STUDLEN); strcpy(p->name,name); strcpy(p->sex,sex); p->weight=weight; p->high=high; p->next=NULL; ptemp=head; if(head) { while(ptemp->next) ptemp=ptemp->next; ptemp->next=p; } else head=p; printf("继续录入信息?yes or no\n"); scanf("%s",contin); }while(stricmp(contin,"yes")==0); for(wpoint=head;wpoint;wpoint=wpoint->next) if(fwrite(wpoint,STUDLEN,1,fp)!=1) printf("write error\n"); Free(head); fclose(fp); } void Free(student *head) { for(;head;head=head->next) free(head); } void find() { FILE *fp=fopen("student.data","rb"); char name[10]; student *p; if(fp=NULL) printf("打开文件失败\n"); printf("请输入姓名\n"); scanf("%s",name); while(!feof(fp)) { if(fread(p,STUDLEN,1,fp)!=1) { printf("读取失败\n"); break; } else { if(strcmp(p->name,name)) { printf("姓名:%s\n性别:%s\n身高:%.2fcm\n体重:%.2fkg\n",p->name,p->sex,p->high,p->weight); break; } } } fclose(fp); } void main() { int menu; void input(); void find(); printf("请选择:\n"); do { printf("1.输入学生信息\n"); printf("2.查询学生信息\n"); printf("0.退出系统\n"); scanf("%d",&menu); switch(menu) { case 1:input();break; case 2:find();break; case 0:break; default:printf("error\n");break; } }while(menu!=0); }
C语言 关于读文件及如何实现输入文件中已存在的信息则不允许被添加
我写的一个关于添加书籍信息的函数,但实现不了(若书名已经存在,则不允许添加该信息。)这个条件,求问大神是哪里的问题 #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct book { char book_name[20]; char book_writer[10]; char publisher[30]; char publishdate[10]; int price; int quantity; int stock; }BOOK; void insert_Book() { FILE *fp; int n=0; BOOK bk; while(n==0) { printf("\n请输入新书信息...\n包括书名.作者.出版商.出版日期.价格\n"); printf("书名:\n"); scanf("%s",bk.book_name); printf("作者:\n"); scanf("%s",bk.book_writer); printf("出版商:\n"); scanf("%s",bk.publisher); printf("出版日期:\n"); scanf("%s",bk.publishdate); printf("价格:\n"); scanf("%d",&bk.price); bk.stock=0; printf("\n请选择(1:确定\t2:取消\t0:重新输入):"); scanf("%d",&n); } if(n==1) { if((fp=fopen("bookinfo.txt","a"))==NULL) { printf("无法打开文件!"); return; } fprintf(fp,"%s %s %s %s %d %d\n",bk.book_name,bk.book_writer,bk.publisher,bk.publishdate,bk.price,bk.stock); fclose(fp); } system("CLS"); printf("输入成功!\n"); printf("请选择(1:返回主界面\t2:输入另一本图书信息\t0:退出系统):\n"); scanf("%d",&n); switch(n) { case 1:system("CLS");break; case 2:system("CLS"); smcf(); break; case 0:break; default:printf("无此操作,按任意键返回\n"); system("CLS"); break; } } int smcf()//书名重复的情况 { char filename[20]="C:\\bookinfo.txt"; //存放书籍信息的文件 FILE * in; char c,d; char name[20]={0}; //存放输入的书籍名称 BOOK book,tmp; int i=0; printf("请输入书籍名称:"); d=getchar(); while((c=getchar())!='\n') { if(i>=20) { printf("书籍名称超过了20个字符,无法查询!\n"); return; } name[i++]=c; } if((in=fopen(filename,"r"))==NULL)//以只读方式打开文件 { printf("文件%s无法打开,查询失败!\n",filename); return; } i=0; while(!feof(in)) { fscanf(in,"%s\n",book.book_name);//存入书籍信息 if(ferror(in)) { printf("文件读取错误,查询失败!\n"); clearerr(in); return; } else//读取成功 { if(strcmp(name,book.book_name)==0)//若输入的书籍名称与读出的书籍信息中的书籍名称相同 { printf("书名已存在!不允许添加该信息!"); exit(0); } else { insert_Book(); } } } fclose(in); return; } int main() { insert_Book(); return 0; } ``` ```
C语言文件读取的问题。
#include<stdio.h> int main() { int n; FILE *fp; FILE *qw; int i; int j; qw=fopen("out.txt","w"); fp=fopen("\D\in.txt","r"); fscanf(fp,"%d",&n); if (fp==NULL) { printf("\n文件打开失败!\n"); } for(j=0;j<=n;j++) { for(i=2;i<j;i++) { if(j%i==0) { fprintf(qw,"%4d",j); } } } fclose(fp); fclose(qw); return 0; } 该代码能实现从in.txt中读取一个整数n,然后将0到n的质数写入out.txt中吗?
用C语言如何将读到的十六进制信息,再以十六进制形式写入到一个txt文件中呢?
int main() { FILE * fpPhoto, *Head_w;//定义指向文件的指针 unsigned char Exif; fopen_s(&fpPhoto,"E:\\吴老师\\wu teacher\\DJI_0001.JPG", "rb");//以只读方式打开一个二进制文件 if (!fpPhoto) { printf("打开文件失败!\n"); system("pause"); return -1; } else { printf("打开成功!\n"); fseek(fpPhoto, 3L, SEEK_SET); fread(&Exif, sizeof(unsigned char), 1, fpPhoto); printf("%x\n%d",Exif,Exif ); } Exif = 97; fopen_s(&Head_w, "C:\\Users\\Administrator\\Desktop\\01.txt", "w");//以只写方式打开一个文本文件,指定文件不存在,建立新文件 fwrite(&Exif, sizeof(unsigned char), 1, Head_w); fclose(fpPhoto); fclose(Head_w); system("pause"); return 0; }
运行之后为何显示打开文件错误
#include<time.h> #include<stdlib.h> #include<stdio.h> #include<math.h> static int t; int a[100]; extern startf();/*外部说明*/ extern menu();/*外部说明*/ extern TC();/*外部说明*/ extern GZ();/*外部说明*/ //学生基本信息保存模块 void Save(int x) { FILE *fp; int i; a[t]=x; t++; fp=fopen("c:\\youxi.txt","w+"); for(i=0;i<t;i++) { fwrite(&a[i],sizeof(int),1,fp); //每次写一个条录入或一个结构体数组至文件 } if(i>0) { printf("\n完成%d个文件的保存\n",t); system("pause"); } else { system("cls"); printf("\n文件为空,没有保存一个文件\n"); system("pause"); } fclose(fp);//关闭文件 } //显示模块 void display() { int i; for(i=0;i<t;i++) { printf("\n\t\t\t\t%d",a[i]); printf("\n"); } if(t==0) printf("没有分数"); system("pause"); system("cls"); } void main()/*主函数*/ { int count=0; FILE *fp; fp=fopen("c:\\youxi.txt","a+");//保存在c:youxi.txt,以读写创建一个新的 if(fp==NULL)//打开头文件失败 { printf("\n文件打开错误!\n"); exit(0); } while(!feof(fp)) { if(fread(&a[count],sizeof(int),1,fp)==1) //一次从文件中读取一条学生信息 count++; } menu(); } int menu()/*菜单模块*/ { int k; printf("\n\n\n\n\t\t ...................猜数字游戏..................\n"); printf("\t\t|***********************************************|\n"); printf("\t\t|***************==> <==**************|\n"); printf("\t\t|***************==> 1.开 始 <==**************|\n"); printf("\t\t|***************==> <==**************|\n"); printf("\t\t|***************==> 2.退出系统 <==**************|\n"); printf("\t\t|***************==> <==**************|\n"); printf("\t\t|***************==> 3.游戏说明 <==**************|\n"); printf("\t\t|***************==> <==**************|\n"); printf("\t\t|***************==> 4.显示分数 <==**************|\n"); printf("\t\t|***************==> <==**************|\n"); printf("\t\t|***********************************************|\n"); printf("\t\t|...............................................|\n"); printf("\n\n\n\n"); printf("\t\t请按提示输入:"); scanf("%d",&k); switch(k) /*选择项*/ { case 1: { system("cls"); startf(); };break; case 2: { system("cls"); break; };break; case 3: { system("cls"); return GZ(); } case 4: { system("cls"); display(); system("pause"); return menu(); } default: { printf("\t\t您的输入有误,请重新输入~\n"); system("pause"); system("cls"); return menu(); } } } int startf( )/*游戏模块*/ { int n,m=0,g,s,b,q,cs,C=0,f;//**cs表示测试数据**// do { printf("是否自定义数值:1/0 (1:是 /0:否)\n"); scanf("%d",&f); switch(f) { case 0: srand((int)time(0));/*随机数据的产生*/ n=1+(int)(10000.1*rand()/(RAND_MAX+1.0));break; default: printf("你输入有误,请重新输入~~"); system("pause"); case 1:printf("请输入你要自定义的数据\n"); scanf("%d",&n);break; } g=n%10; s=n%100/10; b=n/100%10; if(n<1000) q=0; } while((g==s)||(g==b)||(g==q)||(s==b)||(s==q)||(b==q)||(n<=124)||(n>=10000)) ;/*随机数据的产生*/ int a[4]={q,b,s,g};/*将随机数据重组*/ system("cls"); printf("欢迎进入猜数字游戏...\n\n"); printf("\t\t.......A:数字正确,且位置正确 .......\n");/*温馨提示*/ printf("\t\t.......B:数字正确,但位置错误 .......\n"); printf("\t\t.......m:实验次数 .......\n\n"); do { int c; printf("请输入四个0到9之间的数字,且不重复,如:1234\n"); scanf("%d",&cs);/*判断随机数据是否合格*/ int g1,s1,b1,q1,A=0,B=0; g1=cs%10;///**拆分测试数据**// s1=cs%100/10; b1=cs/100%10; { if(cs<1000) q1=0; else q1=cs/1000;///**拆分测试数据**// } int p[4]={q1,b1,s1,g1},i,j;/*比较各位数是否相等*/ if (cs==n)//游戏区// break; { for(i=0;i<4;i++) for(j=0;j<4;j++) if(p[i]==a[j]) if(i==j) A++; else B++; m++; system ("cls"); printf("\t\t\t%dA%dB,m=%d",A,B,m); printf("\n"); printf("\n"); } } while(m<8);//游戏区// { if(m<8||cs==n)//游戏得分情况// { switch(m) { case 1: system("cls"); printf("\t\t\t\tscore:90\n\t\t\t\t游戏过关!!!\n");Save(90);break; case 2: system("cls"); printf("\t\t\t\tscore:80\n\t\t\t\t游戏过关!!!\n");Save(80);break; case 3: system("cls"); printf("\t\t\t\tscore:70\n\t\t\t\t游戏过关!!!\n");Save(70);break; case 4: system("cls"); printf("\t\t\t\tscore:60\n\t\t\t\t游戏过关!!!\n");Save(60);break; case 5: system("cls"); printf("\t\t\t\tscore:50\n\t\t\t\t游戏过关!!!\n");Save(50);break; case 6: system("cls"); printf("\t\t\t\tscore:40\n\t\t\t\t游戏过关!!!\n");Save(40);break; case 7: system("cls"); printf("\t\t\t\tscore:30\n\t\t\t\t游戏过关!!!\n");Save(30);break; default: system("cls"); printf("\t\t\t\t一次通关 YOU ARE DOOG!!!\n\t\t\t\tscore:100\t\t\t\t\n"); Save(100); } } else printf("\t很遗憾游戏结束了,你可以选择继续重新开始\n");//判断胜利与否// } system("pause"); system("cls"); return TC(); } int TC()/*提示模块*/ { int h; printf("\n\n\n\n\n\n\n"); printf("\t\t|***************************************************|\n"); printf("\t\t|***************==> <==******************|\n"); printf("\t\t|***************==> 1.继 续 <==******************|\n"); printf("\t\t|***************==> <==******************|\n"); printf("\t\t|***************==> 2.游戏退出 <==******************|\n"); printf("\t\t|***************==> <==******************|\n"); printf("\t\t|***************************************************|\n"); printf("\t\t|...................................................|\n"); printf("\n\n\n\n"); printf("\t\t请按提示输入:"); scanf("%d",&h); switch(h) { case 1: { system("cls"); menu(); };break; case 2: { system("cls"); break; };break; default: { system("cls"); printf("您的输入有误,请重新输入~"); return menu(); } } } int GZ()/*说明模块*/ { printf("\n\n\n\n\t\t..................游戏规则................\n\n"); printf("\t\t 该游戏可以由程序随机产生或者自定义四个\n\n"); printf("\t\t 0到9之间的数字,且不重复。玩游戏者通过\n\n"); printf("\t\t 游戏提示输入八次来匹配上面所输入的数字。\n\n"); printf("\t\t A表示位置正确且数字正确,\n\n"); printf("\t\t B表示数字正确而位置错误,\t\n\n"); printf("\t\t m表示实验的次数。\t\n\n"); printf("\t\t..........................................\n\n\n\n"); system("pause"); system("cls"); return menu(); }
关于c语言从文件中读取学生信息,处理并打印
![图片说明](https://img-ask.csdn.net/upload/201712/07/1512617928_774992.png) b) 建议函数流程: i. 打开数据文件,失败返回-1; ii. 从头到尾扫描数据文件(即预读一遍)获得学生人数; iii. 根据学生人数,利用malloc和sizeof等函数或运算符为struct student** pStudents分配内存; iv. 利用rewind函数,定位到文件头; v. 读取数据文件,并把每一条记录通过数组下标法或指针法保存到结构体数组pStudents中; vi. 关闭文件; vii. 返回学生人数。 c) 数据文件格式说明: 一行一条学生信息的记录,不同属性用空格隔开,输入数据中无总成绩记录,例如: 张三 通信 89 93 95 李四 网络 88 91 94 王五 物联网 71 94 88 3. 编写统计函数: a) 函数定义void Count(struct student pStudents[], int num)。输入参数分别为保存学生的结构体数组和学生人数。 b) 功能为:统计所有学生的总成绩和每个专业(假定一共三个专业:通信,网络,物联网)的平均成绩;输入参数包括学生信息结构体数组,学生人数,返回的每个学生的总成绩直接填充到对应的输入结构体数组对应字段中。统计信息包括三个专业的总人数、平均成绩数组,用全局变量来表示。访问每个学生信息的时候,用指针来指向当前正在处理的学生。 c) 设计一个或者三个带参数的宏,判断输入的字符串是否是指定的专业名称,并在函数Count中使用。 5. 编写main函数实现: a) 定义变量,其中保存学生信息的数据文件直接在源代码中初始化; b) 读取学生信息,如果失败,打印失败信息并退出程序; c) 统计学生信息; d) 输出统计信息。 e) 释放内存。 ``` #include <stdio.h> #include <stdlib.h> #include <string.h> struct student{ char name[15]; char major[15]; int Eng_sco; int cal_sco; int c_sco; int sum; }; int tx_per=0,tx_ave,tx_sum=0; int wl_per=0,wl_ave,wl_sum=0; int wlw_per=0,wlw_ave,wlw_sum=0; int ReadStudentInfo(const char* filename, struct student** pStudents); void Count(struct student pStudents[], int num); int main() { int count; int m; struct student *list; count=ReadStudentInfo("readme.txt", &list); printf("学生信息: \n"); printf("----------------------------------------------------\n"); printf("序号 姓 名 专业名称 英语成绩 线性代数成绩 c语言成绩 总成绩\n"); for(m=1;m<=count;m++) { printf("%4d %s %s %4d %4d %4d %4d\n",m,(list+m-1)->name,(list+m-1)->major,(list+m-1)->Eng_sco,(list+m-1)->cal_sco,(list+m-1)->c_sco,(list+m-1)->sum); } Count(list, count); printf("\n统计信息 :\n"); printf("----------------------------------------------------\n"); printf("序号 专业名称 学生人数 平均成绩\n"); printf(" 1 通信 %d %d\n",tx_per,tx_ave); printf(" 2 网络 %d %d\n",wl_per,wl_ave); printf(" 3 物联网 %d %d\n",wlw_per,wlw_ave); return 0; } int ReadStudentInfo(const char* filename, struct student** pStudents) { FILE *fp; char ch; int i=1,j; fp=fopen(readme.txt,"r"); if(fp==NULL) { printf("cann't open the file"); exit(-1); } ch=fgetc(fp); while(ch!=EOF) { if(ch=='\n') { i++; } ch=fgetc(fp); } rewind(fp); *pStudents=(struct student*)malloc(sizeof(** pStudents)*i); for(j=0;j<i;j++) { fread(&*pStudents[j],sizeof(struct student)-sizeof(int),1,fp); (*pStudents+j)->sum=((*pStudents+j)->Eng_sco+(*pStudents+j)->cal_sco+(*pStudents+j)->c_sco); } fclose(fp); return i; } void Count(struct student pStudents[], int num) { int n=1; for(n=1;n<=num;n++) { if(!strcmp((pStudents+n-1)->major,"通信")) { tx_per++; tx_sum=tx_sum+(pStudents+n-1)->sum; } if(!strcmp((pStudents+n-1)->major,"网络")) { wl_per++; wl_sum=wl_sum+(pStudents+n-1)->sum; } if(!strcmp((pStudents+n-1)->major,"物联网")) { wlw_per++; wlw_sum=wlw_sum+(pStudents+n-1)->sum; } tx_ave=tx_sum/tx_per; wl_ave=wl_sum/wl_per; wlw_ave=wlw_sum/wlw_per; } free(pStudents); } ``` 运行不起来,是哪里出问题了?
Matlab的simulink如何使用写好的C语言?
我按照教程,将C语言程序包装成了.mexw文件,但接下来不知道如何使用,在simulink中创建S-funtion组件之后,不会进一步设置。下面是C语言程序(多元线性回归,读取.csv文件中的表格,输入x,y。在所输入的最近区间求z=(x,y)的回归)求大佬教如何使用 ``` #include<stdio.h> #include"math.h" #include <stdlib.h> #include<string.h> void FreeData(double **dat, double *d, int count) { int i, j; free(d); for(i = 0;i < count; i ++) free(dat[i]); free(dat); } //解线性方程。data[count*[count+1])矩阵数组;count:方程元数; //Answer[count]:求解数组。返回0,求解成功。-1无解或无穷解; int LinearEquations(double *data,int count,double *Answer) { int j ,m ,n; double tmp, **dat, *d=data; dat = (double**)malloc(count * sizeof(double*)); for (m=0;m<count;m++,d+=(count +1)) { dat[m] = (double*)malloc((count+1) * sizeof(double)); memcpy(dat[m],d, (count+1) * sizeof(double)); } d = (double*)malloc((count + 1) * sizeof(double)); for(m = 0; m < count - 1;m ++) { //如果主对角线元素为0,行交换; for(n = m + 1;n < count && dat[m][m] == 0.0;n ++) { if( dat[n][m] != 0.0) { memcpy(d, dat[m], (count + 1)*sizeof(double)); memcpy(dat[m], dat[n], (count + 1) * sizeof(double)); memcpy(dat[n], d, (count + 1) * sizeof(double)); } } //行交换后,主对角线元素仍然为0,无解,返回-1; if ( dat[m][m] == 0.0) { FreeData(dat, d, count); return -1; } //消元 for(n = m + 1; n < count; n++) { tmp= dat[n][m] / dat[m][m]; for(j=m; j <= count; j++) dat[n][j] -= tmp * dat[m][j]; } } for(j=0; j<count; j++) d[j] = 0.0; //求得count - 1 的元 Answer[count - 1]= dat[count - 1][count] / dat[count - 1][count - 1]; //逐行代入求各元 for (m = count - 2;m >= 0; m --) { for(j=count-1; j>m ; j--) d[m] += Answer[j] * dat[m][j]; Answer[m] = (dat[m][count]-d[m]) / dat[m][m]; } FreeData(dat, d, count); return 0; } //求多元 回归方程:Y=B0+B1X1+B2X2+......+BnXn //data[rows*cols]二维数组:X1i,X2i......Xni,Yi(i=0 to rows-1) //rows:数据行数;cols数据列表;Answer[cols]:返回回归系数数组(B0,B1......Bn) //SquarePoor[4]:返回方差分析指标:回归平方和,剩余平方和,回归平方差,剩余平方差 //返回值:0求解成功,-1错误; int MultipleRegression(double *data, int rows, int cols, double *Answer, double *SquarePoor) { int m, n, i, count = cols - 1; double *dat, *p, a, b; if(data == 0 || Answer == 0 || rows<2 || cols<2) return -1; dat = (double*)malloc(cols * (cols + 1) * sizeof(double)); dat[0] = (double)rows; for(n=0;n<count;n++) //n=0 to cols-2 { a = b = 0.0; for(p = data + n, m = 0; m < rows; m ++, p += cols) { a += *p; b += (*p * *p); } dat[n + 1] = a; //dat[0,n+1]=Sum(Xn) dat[(n + 1) * (cols + 1)] = a; //dat[n+1,0]=Sum(Xn) dat[(n + 1) * (cols + 1) + n + 1] = b; //dat[n+1,n+1]=Sum(Xn*Xn) for(i = n + 1; i < count; i++) //i=n+1 to cols-2 { for(a = 0.0, p = data, m = 0; m < rows; m ++, p += cols) a += (p[n] * p[i]); dat[(n+1) * (cols + 1) + i + 1] = a; //dat[n+1,i+1]=Sum(Xn*Xi) dat[(i+1) * (cols + 1) + n + 1] = a; //dat[i+1,n+1]=Sum(Xn*Xi) } } for(b = 0.0, m = 0, p = data + n; m < rows; m++, p += cols) b += *p; dat[cols]= b; //dat[0,cols]=Sum(Y) for(n = 0;n < count; n++) { for(a = 0.0,p = data, m = 0; m < rows; m ++,p += cols) a += (p[n] * p[count]); dat[(n+1) * (cols + 1) + cols] = a; //dat[n+1,cols]=Sum(Xn*Y) } n=LinearEquations(dat, cols, Answer); //计算方程式 //方差分析 if(n == 0 && SquarePoor) { b = b / rows; //b=Y的平均值 SquarePoor[0] = SquarePoor[1] = 0.0; p = data; for(m = 0; m < rows; m ++, p ++) { for( i=1, a = Answer[0]; i < cols;i ++,p ++) a += (*p * Answer[i]); //a=Ym的估计值 SquarePoor[0] += ((a - b) * (a - b)); //U(回归平方和) SquarePoor[1] += ((*p - a)*(*p - a)); //Q(剩余平方和)(*p=Ym) } SquarePoor[2] = SquarePoor[0] / count; //回归方差 if(rows - cols > 0.0) SquarePoor[3] = SquarePoor[1] / (rows - cols);//剩余方差 else SquarePoor[3] = 0.0; } free(dat); return n; } //输出回归方程,并输出误差估计 void Display(double *dat, double *Answer, double *SquarePoor, int rows, int cols) { double v, *p; int i, j; char ch='X'; printf("回归方程式: Z= %.5lf", Answer[0]); for(i=1; i<cols;i++) printf("+%.5lf*%c",Answer[i], ch+i-1); printf(" \n"); printf("回归显著性检验:"); printf("回归平方和: %12.4lf \n 回归方差:%12.4lf\n", SquarePoor[0], SquarePoor[2]); printf("剩余平方和:%12.4lf \n 剩余方差:%12.4lf\n", SquarePoor[1], SquarePoor[3]); printf("离差平方和:%12.4lf \n 标准误差:%12.4lf\n", SquarePoor[1], SquarePoor[3]); printf("离差平方和:%12.4lf \n 标准误差:%12.4lf\n", SquarePoor[0] + SquarePoor[1], sqrt(SquarePoor[3])); printf("F 检 验 : %12.4lf \n 相关系数: %12.4lf\n" ,SquarePoor[2] / SquarePoor[3], sqrt(SquarePoor[0] / (SquarePoor[0] + SquarePoor[1]))); printf("剩余分析: \n"); printf(" 观察值 估计值 剩余值 剩余平方 \n"); for(i = 0, p = dat; i < rows; i ++, p ++) { v= Answer[0]; for(j = 1; j < cols; j ++, p ++) v += *p * Answer[j]; printf("%12.2lf%12.2lf%12.2lf%12.2lf\n", *p, v, *p - v, (*p - v) * (*p - v)); } system("pause"); } //主程序 int main() { double data[4][3];//定义矩阵,4列3行,4列为临近的四个点,3行为X,Y,Z; FILE *fp = fopen("C://BK.csv", "r");//打开文件(对应的文件名和路径) if (fp == NULL) //如果文件打开失败则结束 { printf("file open error\n"); return -1; } //定义Y的数组,Y[0]为Y的值,Y[1-1000]为该Y对应的Z值 double A[1000]; double B[1000]; double C[1000]; double D[1000]; double E[1000]; double F[1000]; double G[1000]; double H[1000]; double I[1000]; double J[1000]; double K[1000]; //运用循环语句,将文件中的数字矩阵存入到数组 for (int i = 0;i<255; i++) { fscanf(fp, "%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf", &A[i], &B[i], &C[i], &D[i], &E[i], &F[i], &G[i], &H[i], &I[i], &J[i], &K[i]); } double x,y,z; scanf("%lf%lf",&x,&y); //输入已知的x,y double X1,X2,Y1,Y2,Z1,Z2,Z3,Z4; int j; for(j=0;j<255;j++) { if(A[j]<x && x<A[j+1]) //判断x处于表格的哪个X值区间 { //判断y处于表格的哪个Y值区间,并将锁定位置最近的四个数据记为(X1,Y1,Z1)(X2,Y1,Z2)(X1,Y2,Z3)(X2,Y2,Z4) if(B[0]<y && y<C[0]) { X1=A[j]; X2=A[j+1]; Y1=B[0]; Y2=C[0]; Z1=B[j]; Z2=B[j+1]; Z3=C[j]; Z4=C[j+1]; } else if(C[0]<y && y<D[0]) { X1=A[j]; X2=A[j+1]; Y1=C[0]; Y2=D[0]; Z1=C[j]; Z2=C[j+1]; Z3=D[j]; Z4=D[j+1]; } else if(D[0]<y && y<E[0]) { X1=A[j]; X2=A[j+1]; Y1=D[0]; Y2=E[0]; Z1=D[j]; Z2=D[j+1]; Z3=E[j]; Z4=E[j+1]; } else if(E[0]<y && y<F[0]) { X1=A[j]; X2=A[j+1]; Y1=E[0]; Y2=F[0]; Z1=E[j]; Z2=E[j+1]; Z3=F[j]; Z4=F[j+1]; } else if(F[0]<y && y<G[0]) { X1=A[j]; X2=A[j+1]; Y1=F[0]; Y2=G[0]; Z1=F[j]; Z2=F[j+1]; Z3=G[j]; Z4=G[j+1]; } else if(G[0]<y && y<H[0]) { X1=A[j]; X2=A[j+1]; Y1=G[0]; Y2=H[0]; Z1=G[j]; Z2=G[j+1]; Z3=H[j]; Z4=H[j+1]; } else if(H[0]<y && y<I[0]) { X1=A[j]; X2=A[j+1]; Y1=H[0]; Y2=I[0]; Z1=H[j]; Z2=H[j+1]; Z3=I[j]; Z4=I[j+1]; } else if(I[0]<y && y<J[0]) { X1=A[j]; X2=A[j+1]; Y1=I[0]; Y2=J[0]; Z1=I[j]; Z2=I[j+1]; Z3=J[j]; Z4=J[j+1]; } else if(J[0]<y && y<K[0]) { X1=A[j]; X2=A[j+1]; Y1=J[0]; Y2=K[0]; Z1=J[j]; Z2=J[j+1]; Z3=K[j]; Z4=K[j+1]; } } } fclose(fp); //结束文件读取 system("pause"); //关闭文件 //将(X1,Y1,Z1)(X2,Y1,Z2)(X1,Y2,Z3)(X2,Y2,Z4),输入到data矩阵 data[0][0]=X1; data[0][1]=Y1; data[0][2]=Z1; data[1][0]=X2; data[1][1]=Y1; data[1][2]=Z2; data[2][0]=X1; data[2][1]=Y2; data[2][2]=Z3; data[3][0]=X2; data[3][1]=Y2; data[3][2]=Z4; //若符合矩阵格式,则进行矩阵的多元线性回归方程运算,求得Answer[0](常数),Answer[1](x的k值),Answer[2](y的k值); double Answer[5],SquarePoor[4]; if(MultipleRegression((double*)data,4,3,Answer,SquarePoor)==0) Display((double*)data, Answer, SquarePoor, 4, 3); z=Answer[0]+x*Answer[1]+y*Answer[2]; //将x,y代入到求出的回归方程 printf("Z=%.5lf",z); //输出z的值 return 0;//结束 } ```
为什么 我这代码运行时没输入完就结束?“未完成”????急求!!!!
``` #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct stu { char name[10]; char guan[10]; char number1[20]; char number2[20]; char box[30]; }gs; typedef struct pgs { gs chat; pgs* next; }*ptgs; ptgs head=(ptgs)malloc(sizeof(pgs)); int denglu(); int fun1(); int fun2(); int fun3(); int fun4(); int app(char *p);//计算字符串长度! int main() { int i,a; head->next=NULL; printf("\n\n\t\t\t\t**************************************************************\n"); printf("\t\t\t\t\t\t\t通讯录管理系统\n"); printf("\t\t\t\t\t\t\t\t设计者:\n"); printf("\t\t\t\t**************************************************************\n"); printf("\t\t\t\t欢迎使用通讯录管理系统!!!!!!\n"); printf("\t\t\t\t继续请按 1 ,退出请按 0 !\n"); printf("\t\t\t\t请输入:"); for(i=0;i<2;i=1) { scanf("%d",&a); getchar(); switch(a) { case 1:denglu();break; case 0:break; default:printf("\t\t\t\t请重新输入:");continue; } break; } printf("\t\t\t\t系统即将退出!!!"); printf("\t\t\t\t谢谢使用!!!!!"); } int denglu() { int a,i,j,k; printf("\n\n"); printf("\t\t\t\t**************************************************************\n"); printf("\t\t\t\t\t\t\t>登陆界面<\n"); printf("\n\t\t\t\t\t\t\t登录请输入 1 !\n"); printf("\t\t\t\t\t\t\t注册请输入 2 !\n"); printf("\t\t\t\t\t\t\t退出请输入 0 !\n"); printf("\t\t\t\t请输入:"); for(i=0;i<2;i=1) { scanf("%d",&a); getchar(); switch(a) { case 1:fun1();break; case 2:fun2();break; case 0:break; default:printf("\t\t\t\t请重新输入:");continue; } break; } } int fun1()//登陆函数 { FILE *fp; int i,k; char e[81],f[81],a[81],b[81]; if((fp = fopen("D:\\w\\hao\\mm.txt","r"))==0) { printf("\t\t\t\t文件打开失败!!!!"); denglu(); } printf("\n\n\t\t\t\t**************************************************************"); printf("\n\t\t\t\t\t\t\t<>登陆<>\n"); printf("\n\t\t\t\t用户名:"); scanf("%s",e); printf("\n\t\t\t\t密码:"); scanf("%s",f); fscanf(fp,"%s %s",a,b); fclose(fp); if(strcmp(a,e)==0&&strcmp(b,f)==0) { printf("\n\t\t\t\t登陆成功!!!\n"); fun3(); } else { printf("\n\t\t\t\t用户名或密码错误!!\n"); printf("\t\t\t\t重新登陆请按 1 ,退出登陆请按 0 !\n"); printf("\t\t\t\t请选择:") ; for(i=1;i<2;i=1) { scanf("%d",&k); getchar(); switch(k) { case 1: fun1();break; case 0: denglu();break; default: printf("\t\t\t\t\t\t输入错误,请重新输入:"); continue; } break; } } system("pause"); } int fun2()//注册函数 { FILE *fp; int i,k; fp = fopen("D:\\w\\hao\\mm.txt","w"); char a[81],b[81],c[81]; printf("\n\n\t\t\t\t**************************************************************\n"); printf("\t\t\t\t\t\t\t<>注册界面<>\n"); printf("\n\t\t\t\t请输入用户名:"); scanf("%s",a); printf("\n\t\t\t\t请输入密码:"); scanf("%s",b); printf("\n\t\t\t\t请再次输入密码:"); scanf("%s",c); fputs(a,fp); fputs("\n",fp); fputs(b,fp); fclose(fp); if(strcmp(b,c)==0) { printf("\n\t\t\t\t注册成功!\n"); fun1(); } else { printf("\t\t\t\t输入的两次密码不一样,注册失败!\n"); printf("\t\t\t\t重新注册请输入 1 ,退出注册请输入 0 !"); for(i=1;i<2;i=1) { scanf("%d",&k); getchar(); switch(k) { case 1: fun2();break; case 0: denglu();break; default: printf("\t\t\t\t\t\t输入错误,请重新输入:"); continue; } break; } } system("pause"); } int fun3()//菜单 { int j; char k; printf("\n\n\t\t\t\t**************************************************************\n"); printf("\t\t\t\t\t\t\t<>功能中心<>\n"); printf("\n\t\t\t\t\t\t「\n"); printf("\t\t\t\t\t\t\t1.信息录入 \n"); printf("\t\t\t\t\t\t\t2.信息浏览 \n"); printf("\t\t\t\t\t\t\t3.信息查询 \n"); printf("\t\t\t\t\t\t\t4.信息修改 \n"); printf("\t\t\t\t\t\t\t5.退出系统 \n"); printf("\t\t\t\t\t\t\t 」\n"); printf("\t\t\t\t请输入相应数字:"); for(j=0;j<2;j=1) { scanf("%s",&k); getchar(); switch(k) { case '1':fun4();break; case '2': case '3': case '4': case '5':printf("\t\t\t\t系统即将退出!!!\n");break; default:printf("\t\t\t\t输入错误!!\n请重新输入:");continue; } } system("pause"); } int fun4()//添加联系人! { int t,n,a; char f='y'; ptgs p=head,q; FILE *V; if((V=fopen("D://information.dat","a+"))==NULL) { printf("\t\t\t\t文件无法打开!!!\n"); system("pause"); fun3(); } fprintf(V,"\n\t\t\t\t***************************通讯录列表******************************\n"); while(p->next)p=p->next;//修改上一个指针域,使其指向现在的节点! while(f!='n'&&f!='N') { q=(ptgs)malloc(sizeof(pgs));//malloc内存分配函数;内存大小为sizeof(pgs ). p->next=q; p=q; q->next=q; printf("\t\t\t\t姓名:"); scanf("%s",q->chat.name); printf("\n\t\t\t\t贯籍:"); scanf("%s",q->chat.guan); printf("\n\t\t\t\t电话号码1:"); scanf("%s",q->chat.number1); do { n=0; if(app(q->chat.number1)!=11)//判断号码是否为十一位电话号码 { n=1; printf("\t\t\t\t您输入的号码格式不正确!\n"); printf("\t\t\t\t请重新输入:"); scanf("%s",q->chat.number1); } else { for(t=0;t<11;t++) { if(q->chat.number1[t]<'0'||q->chat.number1[t]>'9')//判断号码是否都为0-9之间的字符 { n=1; printf("\t\t\t\t您输入的号码格式不正确!\n"); printf("\t\t\t\t请重新输入:"); scanf("%s",q->chat.number1); break; } } } }while(n); printf("\n\t\t\t\t电话号码2:"); scanf("%s",q->chat.number2); do { n=0; if(app(q->chat.number2)!=11) { n=1; printf("\t\t\t\t您输入的号码格式不正确!\n"); printf("\t\t\t\t请重新输入:"); scanf("%s",q->chat.number2); } else { for(t=0;t<11;t++) { if(q->chat.number2[t]<'0'||q->chat.number2[t]>'9') { n=1; printf("\t\t\t\t您输入的号码格式不正确!\n"); printf("\t\t\t\t请重新输入:"); scanf("%s",q->chat.number2); break; } } } }while(n); printf("\n\t\t\t\t邮箱:"); scanf("%s",p->chat.box); do { a=0; for(t=0;p->chat.box[t]='\0';t++) { if(p->chat.box[t]=='@') a++; } if(a!=1); { printf("\n\t\t\t\t输入的邮箱格式不合理!\n"); printf("\t\t\t\t请重新输入:"); scanf("%s",p->chat.box); } }while(a!=1); fprintf(V,"\t\t\t%s\t%s\t%s\t%s\t%s",p->chat.name,p->chat.guan,p->chat.number1,p->chat.number2,p->chat.box); p=p->next; printf("\n\t\t\t\t是否继续录入?(Y/N)!\n"); scanf("\t\t\t\t%c",&f); } fclose(V); system("pause"); fun3(); } int app(char *p) { int count,k; k=0; while((p[k] = getchar()) != '\n') { k++; } p='\0'; count=0; for(k=0;p[k]!='\0';k++) { count++; } return count; } ```
有没有大神帮我看看哪里出错了?没输完信息,就自动结束的?未完成?
``` #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct stu { char name[10]; char guan[10]; char number1[20]; char number2[20]; char box[30]; }gs; typedef struct pgs { gs chat; pgs* next; }*ptgs; ptgs head=(ptgs)malloc(sizeof(pgs)); int denglu(); int fun1(); int fun2(); int fun3(); int fun4(); int app(char *p);//计算字符串长度! int main() { int i,a; head->next=NULL; printf("\n\n\t\t\t\t**************************************************************\n"); printf("\t\t\t\t\t\t\t通讯录管理系统\n"); printf("\t\t\t\t\t\t\t\t设计者:\n"); printf("\t\t\t\t**************************************************************\n"); printf("\t\t\t\t欢迎使用通讯录管理系统!!!!!!\n"); printf("\t\t\t\t继续请按 1 ,退出请按 0 !\n"); printf("\t\t\t\t请输入:"); for(i=0;i<2;i=1) { scanf("%d",&a); getchar(); switch(a) { case 1:denglu();break; case 0:break; default:printf("\t\t\t\t请重新输入:");continue; } break; } printf("\t\t\t\t系统即将退出!!!"); printf("\t\t\t\t谢谢使用!!!!!"); } int denglu() { int a,i,j,k; printf("\n\n"); printf("\t\t\t\t**************************************************************\n"); printf("\t\t\t\t\t\t\t>登陆界面<\n"); printf("\n\t\t\t\t\t\t\t登录请输入 1 !\n"); printf("\t\t\t\t\t\t\t注册请输入 2 !\n"); printf("\t\t\t\t\t\t\t退出请输入 0 !\n"); printf("\t\t\t\t请输入:"); for(i=0;i<2;i=1) { scanf("%d",&a); getchar(); switch(a) { case 1:fun1();break; case 2:fun2();break; case 0:break; default:printf("\t\t\t\t请重新输入:");continue; } break; } } int fun1()//登陆函数 { FILE *fp; int i,k; char e[81],f[81],a[81],b[81]; if((fp = fopen("D:\\w\\hao\\mm.txt","r"))==0) { printf("\t\t\t\t文件打开失败!!!!"); denglu(); } printf("\n\n\t\t\t\t**************************************************************"); printf("\n\t\t\t\t\t\t\t<>登陆<>\n"); printf("\n\t\t\t\t用户名:"); scanf("%s",e); printf("\n\t\t\t\t密码:"); scanf("%s",f); fscanf(fp,"%s %s",a,b); fclose(fp); if(strcmp(a,e)==0&&strcmp(b,f)==0) { printf("\n\t\t\t\t登陆成功!!!\n"); fun3(); } else { printf("\n\t\t\t\t用户名或密码错误!!\n"); printf("\t\t\t\t重新登陆请按 1 ,退出登陆请按 0 !\n"); printf("\t\t\t\t请选择:") ; for(i=1;i<2;i=1) { scanf("%d",&k); getchar(); switch(k) { case 1: fun1();break; case 0: denglu();break; default: printf("\t\t\t\t\t\t输入错误,请重新输入:"); continue; } break; } } system("pause"); } int fun2()//注册函数 { FILE *fp; int i,k; fp = fopen("D:\\w\\hao\\mm.txt","w"); char a[81],b[81],c[81]; printf("\n\n\t\t\t\t**************************************************************\n"); printf("\t\t\t\t\t\t\t<>注册界面<>\n"); printf("\n\t\t\t\t请输入用户名:"); scanf("%s",a); printf("\n\t\t\t\t请输入密码:"); scanf("%s",b); printf("\n\t\t\t\t请再次输入密码:"); scanf("%s",c); fputs(a,fp); fputs("\n",fp); fputs(b,fp); fclose(fp); if(strcmp(b,c)==0) { printf("\n\t\t\t\t注册成功!\n"); fun1(); } else { printf("\t\t\t\t输入的两次密码不一样,注册失败!\n"); printf("\t\t\t\t重新注册请输入 1 ,退出注册请输入 0 !"); for(i=1;i<2;i=1) { scanf("%d",&k); getchar(); switch(k) { case 1: fun2();break; case 0: denglu();break; default: printf("\t\t\t\t\t\t输入错误,请重新输入:"); continue; } break; } } system("pause"); } int fun3()//菜单 { int j; char k; printf("\n\n\t\t\t\t**************************************************************\n"); printf("\t\t\t\t\t\t\t<>功能中心<>\n"); printf("\n\t\t\t\t\t\t「\n"); printf("\t\t\t\t\t\t\t1.信息录入 \n"); printf("\t\t\t\t\t\t\t2.信息浏览 \n"); printf("\t\t\t\t\t\t\t3.信息查询 \n"); printf("\t\t\t\t\t\t\t4.信息修改 \n"); printf("\t\t\t\t\t\t\t5.退出系统 \n"); printf("\t\t\t\t\t\t\t 」\n"); printf("\t\t\t\t请输入相应数字:"); for(j=0;j<2;j=1) { scanf("%s",&k); getchar(); switch(k) { case '1':fun4();break; case '2': case '3': case '4': case '5':printf("\t\t\t\t系统即将退出!!!\n");break; default:printf("\t\t\t\t输入错误!!\n请重新输入:");continue; } } system("pause"); } int fun4()//添加联系人! { int t,n,a; char f='y'; ptgs p=head,q; FILE *V; if((V=fopen("D://information.dat","a+"))==NULL) { printf("\t\t\t\t文件无法打开!!!\n"); system("pause"); fun3(); } fprintf(V,"\n\t\t\t\t***************************通讯录列表******************************\n"); while(p->next)p=p->next;//修改上一个指针域,使其指向现在的节点! while(f!='n'&&f!='N') { q=(ptgs)malloc(sizeof(pgs));//malloc内存分配函数;内存大小为sizeof(pgs ). p->next=q; p=q; q->next=q; printf("\t\t\t\t姓名:"); scanf("%s",q->chat.name); printf("\n\t\t\t\t贯籍:"); scanf("%s",q->chat.guan); printf("\n\t\t\t\t电话号码1:"); scanf("%s",q->chat.number1); do { n=0; if(app(q->chat.number1)!=11)//判断号码是否为十一位电话号码 { n=1; printf("\t\t\t\t您输入的号码格式不正确!\n"); printf("\t\t\t\t请重新输入:"); scanf("%s",q->chat.number1); } else { for(t=0;t<11;t++) { if(q->chat.number1[t]<'0'||q->chat.number1[t]>'9')//判断号码是否都为0-9之间的字符 { n=1; printf("\t\t\t\t您输入的号码格式不正确!\n"); printf("\t\t\t\t请重新输入:"); scanf("%s",q->chat.number1); break; } } } }while(n); printf("\n\t\t\t\t电话号码2:"); scanf("%s",q->chat.number2); do { n=0; if(app(q->chat.number2)!=11) { n=1; printf("\t\t\t\t您输入的号码格式不正确!\n"); printf("\t\t\t\t请重新输入:"); scanf("%s",q->chat.number2); } else { for(t=0;t<11;t++) { if(q->chat.number2[t]<'0'||q->chat.number2[t]>'9') { n=1; printf("\t\t\t\t您输入的号码格式不正确!\n"); printf("\t\t\t\t请重新输入:"); scanf("%s",q->chat.number2); break; } } } }while(n); printf("\n\t\t\t\t邮箱:"); scanf("%s",p->chat.box); do { a=0; for(t=0;p->chat.box[t]='\0';t++) { if(p->chat.box[t]=='@') a++; } if(a!=1); { printf("\n\t\t\t\t输入的邮箱格式不合理!\n"); printf("\t\t\t\t请重新输入:"); scanf("%s",p->chat.box); } }while(a!=1); fprintf(V,"\t\t\t%s\t%s\t%s\t%s\t%s",p->chat.name,p->chat.guan,p->chat.number1,p->chat.number2,p->chat.box); p=p->next; printf("\n\t\t\t\t是否继续录入?(Y/N)!\n"); scanf("\t\t\t\t%c",&f); } fclose(V); system("pause"); fun3(); } int app(char *p) { int count,k; k=0; while((p[k] = getchar()) != '\n') { k++; } p='\0'; count=0; for(k=0;p[k]!='\0';k++) { count++; } return count; } ```
C语言动态链表写入文件
struct Txl { char name[20]; long long tel; struct Txl *next; }; int n; struct Txl *creat(void) { struct Txl *p1,*p2,*head; n=0; p1=p2=(struct Txl*)malloc(LEN); memset(p1,0,sizeof(LEN)); memset(p2,0,sizeof(LEN)); printf("姓名\t"); scanf("%s",&p1->name); fflush(stdin); printf("电话\t"); scanf("%lld",&p1->tel); fflush(stdin); head=NULL; while(p1->tel!=0) { n=n+1; if(n==1)head=p1; else p2->next=p1; p2=p1; p1=(struct Txl*)malloc(LEN); memset(p1,0,sizeof(LEN)); printf("姓名\t"); scanf("%s",&p1->name); fflush(stdin); printf("电话\t"); scanf("%lld",&p1->tel); fflush(stdin); } p2->next=NULL; return(head); } void prin(struct Txl *head){...}//输出。。。 void save(struct Txl *head) { int i; struct Txl *p; FILE *fp; p=head; if((fp=fopen("1.txt","wb"))==NULL) { printf("不能打开文件"); return; } for(i=0;i<n;i++) { if(fwrite(p,LEN,1,fp)!=1) { printf("写入失败"); } p=p->next; } fclose(fp); } void main(){...}
怎么用C语言读取WireShark捕获的数据包文件
怎么用C语言读取WireShark捕获的数据包文件,要求能分析出以太网头部,Ip头部,TCP头部,并提取出数据部分,下面是我写的一段代码,但是读的不对,希望高手指点 //.pcap文件 //#ifndef xiaohouzi //#define xiaohouzi #ifndef LITTLE_ENDIAN #define LITTLE_ENDIAN (1) #include<Winsock2.h> typedef unsigned int bpf_u_int32; typedef unsigned short u_short; typedef int bpf_int32; typedef unsigned char u_int8_t; ////////////////////////////// typedef char int8_t; ////////////////////////////// typedef unsigned short int u_int16_t; typedef unsigned int u_int32_t; typedef struct pcap_file_header { bpf_u_int32 magic; u_short version_major; u_short version_minor; bpf_int32 thiszone; bpf_u_int32 sigfigs; bpf_u_int32 snaplen; bpf_u_int32 linktype; }pcap_file_header; typedef struct timestamp { bpf_u_int32 timestamp_s; bpf_u_int32 timestamp_ms; }timestamp; typedef struct pcap_header { timestamp ts; bpf_u_int32 capture_len; bpf_u_int32 len; }pcap_header; typedef struct ether_header { u_int8_t ether_dhost[6]; //destination mac address u_int8_t ether_shost[6]; //source mac address u_int16_t ether_type; //ethernet type }ether_header; typedef u_int32_t in_addr_t; // struct in_addr //{ // in_addr_t s_addr; //}; //total length : 20Bytes typedef struct ip_hdr { #if LITTLE_ENDIAN u_int8_t ihl:4; // u_int8_t version:4; //version #else u_int8_t version:4; u_int8_t ihr:4; #endif u_int8_t tos; //service type u_int16_t tos_len; //total len u_int16_t id; // u_int16_t frag_off; //offset u_int8_t ttl; //live time u_int8_t protocol; // u_int16_t chk_sum; //check sum struct in_addr src_IP; //source ip struct in_addr dst_IP; //destnation ip }ip_hdr; //total length : 20Bytes typedef struct tcp_hdr { u_int16_t src_port; //source port u_int16_t dst_port; //destination port u_int8_t seq_no[4]; u_int8_t ack_no[4]; //u_int32_t seq_no; // //u_int32_t ack_no; // /*struct in_addr seq_no; struct in_addr ack_no; */ //u_int8_t reserved_1:4; //u_int8_t th1:4; //tcp header length //u_int8_t flag:6; //u_int8_t reserverd_2:2; u_int8_t length;//长度 u_int8_t type;//ACK。FIN…… u_int8_t wnd_size[2]; //16 bit windows u_int16_t chk_sum; //16 bits check sum ack,syn...... u_int16_t urgt_p; //16 urgent p }tcp_hdr; //total length :8 Bytes //#endif #endif //.cpp文件 #include"pcap.h" #include <windows.h> #include<winsock.h> #include<string.h> #include<stdio.h> #include<stdlib.h> //#include "C:\Users\Administrator\Desktop\zlib\zlib\src\zlib-1.2.3-src\src\zlib\1.2.3\zlib-1.2.3\zlib.h" //#pragma comment(lib, "zlib1.lib") #pragma comment(lib,"ws2_32.lib") int count=0; void main(/*int argc,char *argv[]*/) { pcap_header *ph=(pcap_header*)malloc(sizeof(pcap_header)); ether_header*eh=(ether_header*)malloc(sizeof(ether_header)); ip_hdr * iph=(ip_hdr*)malloc(sizeof(ip_hdr)); tcp_hdr *tcph=(tcp_hdr*)malloc(sizeof(tcp_hdr)); if(ph==NULL||eh==NULL||iph==NULL||tcph==NULL) { printf("内存分配失败\n"); return ; } /*打开文件*/ FILE *pfile=fopen(/*filename*/"1.pcap","rb"); if(pfile==NULL) { printf("open file failed!\n"); return ; } fseek(pfile,0,SEEK_SET);//将文件指针置于头部 /*跳过文件头*/ if( fseek(pfile,24,SEEK_SET)!=0) { printf("文件头跳过失败!\n"); exit(0); return; } /*读取每个数据包进行分析*/ while(!feof(pfile)) { ZeroMemory(ph,sizeof(pcap_header)); ZeroMemory(eh,sizeof(*eh)); ZeroMemory(iph,sizeof(*iph)); ZeroMemory(tcph,sizeof(*tcph)); count++;//读取的数据包计数 /*读取包头*/ if(!fread(ph,sizeof(pcap_header),1,pfile)) { printf("读取数据包头失败\n"); break; } printf("数据包%d的长度是%d,数据包读取的时间是%f\n",count,ph->capture_len ,ph->ts .timestamp_ms *0.001+ph->ts .timestamp_s ); /*读取以太网头*/ if(!feof(pfile)) { if(!fread(eh,sizeof(*eh),1,pfile)/*||eh->ether_type !=0x0800*/) { printf("读取以太网头部失败\n"); break; } } printf("源MAC地址是:0x%2x:0x%2x:0x%2x:0x%2x:0x%2x:0x%2x\n",eh->ether_shost[0],eh->ether_shost [1],eh->ether_shost [2],eh->ether_shost [3],eh->ether_shost [4],eh->ether_shost [5] ); printf("目的MAC地址是:0x%2x:0x%2x:0x%2x:0x%2x:0x%2x:0x%2x\n",eh->ether_dhost [0],eh->ether_dhost [1],eh->ether_dhost [2],eh->ether_dhost [3],eh->ether_dhost [4],eh->ether_dhost [5]); /*读取IP头*/ if(!feof(pfile)) { if(!fread(iph,sizeof(*iph),1,pfile)/*||iph->protocol !=6*/) { printf("读取IP头失败\n"); break; } } printf("源IP地址:%s\n",inet_ntoa(iph->src_IP)); printf("目的IP地址:%s\n",inet_ntoa(iph->dst_IP )); /*读取TCP头*/ if(!feof(pfile)) { if(!fread(tcph,sizeof(*tcph),1,pfile)) { printf("读取tcp头失败\n"); break; } } printf("源端口:%d\n",tcph->src_port ); printf("目的端口:%d\n",tcph->dst_port ); if(ph->capture_len -54==0)//没有数据部分 { continue; } else//存在数据部分,读取数据 { unsigned char *buf=(unsigned char*)malloc(ph->capture_len -54); if(buf==NULL) { printf("分配数据区域失败!\n"); break; } if(!feof(pfile)) { if(!fread(buf,sizeof(unsigned char),ph->capture_len -54,pfile)) { printf("读取数据失败\n"); break; } } } }//end while /*释放资源*/ free(ph); free(eh); free(iph); free(tcph); fclose(pfile); }
新人求助!!为什么输出的结果是乱码
``` #include<stdio.h> #include<stdlib.h> FILE *f1; int main() { char ch; int i; f1=fopen("temp.bin","wb"); if(f1==NULL) { printf("文件打开失败\n"); exit(0); } for(i=0;i<128;i++) { fputc(i,f1); } fclose(f1); f1=fopen("temp.bin","rb"); if (f1==NULL) { printf("文件打开失败\n"); exit(0); } while(ch=fgetc(f1)!=EOF) { putchar(ch); } ![图片说明](https://img-ask.csdn.net/upload/201911/26/1574734459_494095.jpg) fclose(f1); return 0; } ```
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
小白学 Python 爬虫(25):爬取股票信息
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Linux基础入门 小白学 Python 爬虫(4):前置准备(三)Docker基础入门 小白学 Python 爬虫(5):前置准备(四)数据库基础 小白学 Python 爬虫(6):前置准备(...
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
世界上最牛的网络设备,价格低廉,其貌不扬......
夜深人静,电视和电脑都已经关机休息,但是我还在默默工作,我安静地趴在你家中的某个地方,7*24小时不眠不休,任劳任怨,目的只有一个,能让你舒服地躺在床上,畅快地刷手机!没错,这就是我,...
《面试宝典》2019年springmvc面试高频题(java)
前言 2019即将过去,伴随我们即将迎来的又是新的一年,过完春节,马上又要迎来新的金三银四面试季。那么,作为程序猿的你,是否真的有所准备的呢,亦或是安于本职工作,继续做好手头上的事情。 当然,不论选择如何,假如你真的准备在之后的金三银四跳槽的话,那么作为一个Java工程师,就不可不看了。如何在几个月的时间里,快速的为即将到来的面试进行充分的准备呢? 1、什么是Spring MVC ?简单...
一名大专同学的四个问题
【前言】   收到一封来信,赶上各种事情拖了几日,利用今天要放下工作的时机,做个回复。   2020年到了,就以这一封信,作为开年标志吧。 【正文】   您好,我是一名现在有很多困惑的大二学生。有一些问题想要向您请教。   先说一下我的基本情况,高考失利,不想复读,来到广州一所大专读计算机应用技术专业。学校是偏艺术类的,计算机专业没有实验室更不用说工作室了。而且学校的学风也不好。但我很想在计算机领...
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
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万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
毕业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:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
2020年1月中国编程语言排行榜,python是2019增长最快编程语言
编程语言比例 排名 编程语言 最低工资 工资中位数 最低工资 最高工资 人头 人头百分比 1 rust 20713 17500 5042 46250 480 0.14% 2 typescript 18503 22500 6000 30000 1821 0.52% 3 lua 18150 17500 5250 35000 2956 0.84% 4 go 17989 16...
看完这篇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 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
工作十年的数据分析师被炒,没有方向,你根本躲不过中年危机
2020年刚刚开始,就意味着离职潮高峰的到来,我身边就有不少人拿着年终奖离职了,而最让我感到意外的,是一位工作十年的数据分析师也离职了,不同于别人的主动辞职,他是被公司炒掉的。 很多人都说数据分析是个好饭碗,工作不累薪资高、入门简单又好学。然而今年34的他,却真正尝到了中年危机的滋味,平时也有不少人都会私信问我: 数据分析师也有中年危机吗?跟程序员一样是吃青春饭的吗?该怎么保证自己不被公司淘汰...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
立即提问