结构体里面包含结构体变量,用scanf赋值 5C

int main()
{

typedef struct datetime
{
char year[10];
char month[10];
char day[10];
char hours[10];
char minutes[10];
}datetime;

typedef struct Student
{
    char Stu_Id[20];
    char Stu_Name[10];
    char Stu_Sex[10];
    char Dor_Id[10];
    datetime Stu_Enr[10];
    datetime Stu_Birth[10];
    char Stu_Study[10];
    char Stu_Class[10];
    char Stu_Polit[10];
    char Stu_Add[50];
    char Stu_Tel[10];
    char Stu_Sta[10];
    char Stu_Des[50];
}Student;


Student *p;
scanf("%s",p->Stu_Enr->year);
printf("%s",p->Stu_Enr->year);

}


这样的话输入字符,按回车后程序会崩溃

c

13个回答

问题不在结构体吧,Student* p 未初始化呀,应该 Student * p = new Student;

Student* p 未分配内存

不知道你用的什么编译器,这个错误应该编译不过去,是指针没有初始化,有两种改法:
Student *p =new Student;

Student p = (Student)malloc(sizeof(Student));
第一种不行的话 可以用第二种

Student* p 未初始化

没有给p指针分配相应的内存

Student* p是空指针。初始化该指针,通过new或malloc

结构体是空指针,要创建(new或malloc)一个新指针

首先你得明白malloc函数的作用;malloc函数是在内存中找到一个合适大小的内存空间来存储数据,并让指针指向这个空间的首地址。它的意义是在创建数组时,可以创建动态数组。
比如 int a[n],*p;p=a;是不合法的。而int *p;p=(int *)malloc(n*sizeof(int))却可以实现创建这样一个长度为n的数组

p是一个空指针,没有办法赋值的,直接Student p

student *p没有分配内存

共13条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
scanf函数给结构体中指针变量赋值出现段错误
#include<stdio.h> #include<stdlib.h> struct book{ char *name; int num; }; int main() { struct book *bk; bk = (struct book*)malloc(sizeof(struct book)); if(!bk) { printf("no space for malloc\n"); return 0; } scanf("%s",bk->name); /*此处显示:段错误*/ printf("%s\n",bk->name); free(bk); return 0; }
更改主调函数中的变量,使用scanf给变量赋值怎么正确使用?
如下代码,请帮忙解答,谢谢。 在main()函数中调用时 为什么用scanf的时候,输入double类型的值时得出的值是: 1,2 x is -92559604281615349000000000000000000000000000000000000000000000.000000,y is -92559604377396321000000000000000000000000000000000000000000000.000000 x value is -92559604281615349000000000000000000000000000000000000000000000.000000,y value is -92559604377396321000000000000000000000000000000000000000000000.000000 min is -92559604377396321000000000000000000000000000000000000000000000.000000,max is -92559604281615349000000000000000000000000000000000000000000000.000000 直接给a,b赋值是正确的。 x value is 1.000000,y value is 2.000000 min is 1.000000,max is 2.000000 #include<stdio.h> #include<stdlib.h> void change(double* x, double* y); int main(void) { double a,b; scanf("%f,%f",&a,&b); printf("x is %f,y is %f\n",a,b); change(&a, &b); a = 1.0; b = 2.0; change(&a, &b); system("pause"); } void change(double* x, double* y) { double min,max; min = *x; max = *y; if(*x > *y) { min = *y; max = *x; } printf("x value is %f,y value is %f\nmin is %f,max is %f\n",*x,*y,min,max); }
C语言中的链表赋值问题
我写了一个存储电影名字以及评级的链表,不理解其中以下三点 1.prev->next=current, 2.prev=current, 3.current=current->next 我目前的理解是:1.把current这个结构体指针变量的地址赋值给prev中的结构体指针变量next;2.把current这个结构体指针变量的地址赋值给结构体指针变量prev;3.令结构体指针变量current的值等于结构体指针变量next的值 不知道对吗? 以下是我的源代码: #include<stdio.h> #include<stdlib.h> //malloc();原型 #include<string.h> //strcpy();原型 #define SIZE 20 //最大字数 typedef struct film { char title[SIZE]; int rating; struct film * next; }Film; int main() { Film *head=NULL; Film *prev,*current; char title2[SIZE]; //写入 puts("Scan first title(0-20 charecter)"); while(gets(title2)!=EOF&&title2[0]!='\0') { current = (Film *)malloc(sizeof(Film)); //存第一个指针head if(head==NULL) { head=current; } //current's address 赋给next else prev->next=current; strcpy(current->title,title2); puts("Rating is...(0-10)"); scanf("%d",&current->rating); getchar(); //节点更换 puts("Enter next movie title"); prev=current; } //显示 if(head) { current=head; while(current!=NULL) { printf("the title is %s,the rating is %d\n",current->title,current->rating); current=current->next; //把下一个结构体指针的地址给current } } else puts("Not find any dota..."); //清内存 current=head; while(current) { free(current); current=current->next; } puts("OK!"); return 0; } 十分感谢
此函数的形参是个结构变量,而不是指针,所以给形参赋值可以修改实参的值吗?
根据KNking现代方法一书中所述,int big,small; max_min(&big,&small)以指向实参的指针作为参数才能改变实参的值(找最大最小数) 而以下程序片段以结构变量而非指针作为参数,调用后可以改变相应实参的值吗? void update(struct part inv[], int np) { int i, number, change; printf("Enter part number: ");    scanf("%d", &number); i = find_part(number, inv, np);    if (i >= 0) { printf("Enter change in quantity on hand: ");     scanf("%d", &change); inv[i].on_hand+=change;//给形参(一个结构变量的元素)赋值可以修改实参对应元素的值??? } else printf("Part not found.");
c语言,每次执行到给结构体内的二维数组成员变量赋值时程序就崩溃了,有大佬知道原因吗
结构体的声明 ``` struct IMPERIAL{ int **my_map; int numVar; void(*initialMap)(int **, int ); void(*clearMap)(int **, int ); }; void myInitialMap(int **my_map, int n) { my_map = (int **)malloc(sizeof(int*) * n); for(int i=0;i<n;++i){ my_map[i] = (int*)malloc(sizeof(int) * n); } int count=0; } void myClearMap(int **my_map, int n) { for(int i=0;i<=n;i++) free(*(my_map + i)); free(my_map); } ``` 初始化 ``` int node; char myInput[10]; for(int j=2;j<=item.numVar;j++) for(int i=1;i<j;i++){ scanf("%s",myInput); int b; if(myInput[0]!='x') { sscanf(myInput,"%d",&node); item.my_map[j][i]=node; item.my_map[i][j]=item.my_map[j][i]; } } ``` 每次一到 item.my_map[j][i]=node; 程序就崩溃了,不知道什么原因啊 编译过了,没有报错,执行到这一步程序就会直接卡住
Windows系统下,c语言、c++语言中的给变量赋值,也是最终通过API实现的吗?
①例如程序中有一个赋值语句 a=100; 程序执行时,也是转化为调用系统API来将变量a所代表的存储区域赋值100吗? ②对于程序,即是在程序中没有直接使用Windows API ,例如,main函数只包括printf,即只是使用 printf 输出一个内容时,那么程序执行时,也是最终调用系统API来完成输出的吗? ③Windows API是不是可以这样理解:像scanf printf等是建立在API函数的基础上的,是封装了API函数的集合,换句话说,是别人为了方便而写的一些常用的功能,但是如果有自己的特定需求,就需要自己在代码中直接调用API函数?即printf是别人从Windows几万个API函数中找了一些函数,组装成了 printf,而我在程序中调用API是我自己直接使用API函数,组装printf使用的API函数与我可以直接调用的API函数没有什么特别之处,都是这几万个API函数 ——这样理解API对吗
被注释的地方如果给定义任何一个无关变量并赋值,程序的运算结果就不一样了,这是为什么?求赐教
被注释的地方如果给定义任何一个无关变量并赋值,程序的运算结果就不一样了,这是为什么? #include<stdio.h> main()//冒泡排序 { int a[5],i,t; printf("请输入五个数:\n"); for(i=0;i<5;i++) scanf("%d",&a[i]); for(int j=5;j>1;j--) { // int m=1; for(i=0;i<j;i++) { if(a[i]>a[i+1]) { t=a[i]; a[i]=a[i+1]; a[i+1]=t; } } } for(i=0;i<5;i++) printf(" %d",a[i]); } ![图片说明](https://img-ask.csdn.net/upload/201912/26/1577343525_128514.jpg)![图片说明](https://img-ask.csdn.net/upload/201912/26/1577343541_254902.jpg)
这个字符指针变量赋值时为什么会烫烫烫烫烫烫?
``` #include <iostream> void IntToStr(int m,char *s); int main() { int m, n; char s1[100], s2[100]; printf("输入两个位数相同的正整数:\n"); scanf_s("%d%d", &m, &n); IntToStr(m,s1); IntToStr(n,s2); puts(s1); } void IntToStr(int m,char *s) { int i, mi, x; for (i = 1;; i++) { x = m * (pow(0.1, i)); if (x < 1) { mi = i; break; } } i = 1; x = m / pow(10,--mi); *(s + mi - 1) = '\0'; *(s++) = x; for (; mi; mi--) *(s++) = (m - *(s-1) * pow(10, mi)) / pow(10, mi - 1); } ```
C语言scanf附加格式*的含义?
scanf("%d*%d",&iNumber1,&iNumber2); /*输入整型数据*/这句是什么意思?怎么执行的? 完整程序如下: #include<stdio.h> int main() { long iLong; /*长整型变量*/ short iShort; /*短整型变量*/ int iNumber1=1; /*整型变量,为其赋值为1*/ int iNumber2=2; /*整型变量,为其赋值为2*/ char cChar[10]; /*定义字符数组变量*/ printf("请输入一个长整型变量数值\n"); /*输出信息提示*/ scanf("%ld",&iLong); /*输入长整型数据*/ printf("请输入一个短整型数值\n"); /*输出信息提示*/ scanf("%hd",&iShort); /*输入短整型数据*/ printf("请输入一个整数:\n"); /*输出信息提示*/ scanf("%d*%d",&iNumber1,&iNumber2); /*输入整型数据*/ printf("请输入一个字符串,但是输出时只能显示前三个字符\n"); /*输出信息提示*/ scanf("%3s",cChar); /*输入字符串*/ printf("长整型的数值为: %ld\n",iLong); /*显示长整型值*/ printf("短整型的数值为: %hd\n",iShort); /*显示短整型值*/ printf("整型数值1为: %d\n",iNumber1); /*显示整型iNumber1的值*/ printf("整型数值2为: %d\n",iNumber2); /*显示整型iNumber2的值*/ printf("输出字符串的前三位: %s\n",cChar); /*显示字符串*/ }
程序中定义的全局变量,list 在input中已经赋值,为什么print函数中List=null?
#include<stdio.h> #include<stdlib.h> #define N 4 struct node{ int score; struct node*link; }; struct node node; struct node*list,*p,*r,*q; void input(struct node*list) { int i; int ch; for(i=0;i<N;i++) { printf("please input the score of %d\t",i+1); p=(struct node*)malloc(sizeof(struct node*)); scanf("%d",&p->score); p->link=NULL; if(list==NULL) list=p; else r->link=p; r=p; printf("数据为%d",p->score); } } void average(struct node*list) { int s=0,i; double average2; if(list==NULL) printf("链表为空"); for(i=0;i<N;i++) { s+=list->score; list=list->link; } average2=(double)s/N; printf("%f",average2); } void print(struct node*list) { int i; printf("顺利进入"); if(list==NULL) printf("这是空链表"); else { q=list; while(q->link!=NULL) { printf("%d",q->score); q=q->link; } }} int main() { void input(struct node*list); void average(struct node*list); void print(struct node*list); int ah; system("cls"); while(1){ printf("链表操作系统:"); printf("\n1.建立链表\n2.输出数据\n3.求平均数\n"); scanf("%d",&ah); switch(ah){ case 1:input(list);break; case 2:print(list);break; case 3:average(list);break; default:printf("wrong!");break; }}}
用C语言编写二元一次方程
如何编写程序,使得当我输入10x+4y=100(整组同时输入,即只输入一次回车),能给变量赋予系数的值? 1、当系数为1的情况呢?例:3x+y=10(我使用scanf()语句无法解决,现在的思路是用getchar()赋值给数组,但无法区分系数的位数以及系数属于哪个未知数) 2、当方程中有减号时,如何与数字一起赋给变量?例:x-y=10
编写一个解二元一次方程的程序。
如何编写程序,使得当我输入10x+4y=100(整组同时输入,即只输入一次回车),能给变量赋予系数的值? 1、当系数为1的情况呢?例:3x+y=10(我使用scanf()语句无法解决,现在的思路是用getchar()赋值给数组,但无法区分系数的位数以及系数属于哪个未知数) 2、当方程中有减号时,如何与数字一起赋给变量?例:x-y=10
如何做到只有两个变量在while里循环输入
说不大清楚看一下代码吧 写的有点乱 我对这个问题的理解是 通过scanf函数给一个变量A “赋值”后这个值能不能在后面被替换掉 第一个函数是我想自己创一个函数用来输入 但是发现本质是一样的 while 里的第一次循环是对的 但是第二次输入数据到两个变量时就输出不了了 求大神解答 我知道其他的解决办法 比如跳到外面输入或者goto语句 #include "stdio.h" #include "stdlib.h" float scan(void); float scan(void) { float a; scanf("%f",&a); return a; } void cls(); void cls() { getchar(); getchar(); system("cls"); } float jiafa(float a,float b); float jiafa(float a,float b) { return a+b; } int main() { int i,a,b; char jiafachoose; float a,b,c; while(1) { printf("\t1.+fa\n\t2.-fa\n\t3.*fa\n\t4./fa\n"); scanf("%d",&i); switch (i) { case 1 : printf("please input tuo number\n"); a=scan(),b=scan(); printf("%f",jiafa(a,b)); while (1) { printf("continue? y or n\n"); while((jiafachoose=getchar())!='\n'){ continue; } if((jiafachoose=getchar())=='y') { printf("please input two number\n"); a=scan(); b=scan(); printf("%f",jiafa(a,b)); } else if((jiafachoose=getchar())=='n') { break; } cls(); } break; } } return 0; }
代码是否会导致死机,卡屏
#include "stdio.h" struct employee { int member; char name[20]; char department[30]; int salary; }emp[100],t; void income(int n) { if(n==0) return; else { scanf("%d",&emp[n-1].member); scanf("%s",&emp[n-1].name); scanf("%s",&emp[n-1].department); scanf("%d",&emp[n-1].salary); income(n-1); } } void pay(int n) { if(n==0) return; else { printf("%-6d",emp[n-1].member); printf("%-8s",emp[n-1].name); printf("%-12s",emp[n-1].department); printf("%-4d\n",emp[n-1].salary); pay(n-1); } } void sort_sa(int n) { int i,j,k; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++) { if(emp[k].salary>emp[j].salary) k=j; if(k!=i) { t=emp[i].salary; emp[i].salary=emp[j].salary; emp[j].salary=t; } } } } int main(int argc, char* argv[]) { int n; printf("请输入有多少员工\n"); scanf("%d",&n); printf("请输入员工信息\n"); printf("工号 名字 部门 工资\n"); income(n); printf("工号 名字 部门 工资\n"); pay(n); int i,j,k; sort_sa(n); printf("\n"); pay(n); } 代码在这,其实是有错误的,其中sort_sa函数那转换时,把结构体内类型赋值给了整个结构体变量,但这个代码在visual C++中只是提示错误,在dev C++中,不仅提示错误,每次编译后我拉动旁边的滑条后就突然屏幕停止工作,整个屏幕就死机住了,在vC中没事,我现在已经改过了代码的错误,死机的情况不会出现了,我想知道为什么会这样,是什么导致了屏幕死机,死循环?感觉就算赋值错误也不至于死机吧
求各位大神帮忙做程序结构图(也就是模块间的关系)
求各位大神帮忙做程序结构图(也就是模块间的关系) #include <stdio.h> #include <conio.h> #include <windows.h> #include <stdlib.h> #include <string.h> FILE *fp=NULL;//文件指针 float LJE;//历史金额 int i=0;//变量 分级 int flag; //定义时间结构体,包括时分秒和10毫秒 struct tm //结构体 { int hours,minutes,seconds; //定义时,分,秒 int hscd; //毫秒 }time,tmp,total; //time用以计时显示,tmp用以存储上一阶段时间,total记总时间 int cnt; FILE* fout; //文件指针 //每次调用update函数,相当于时间过了10ms int Rigester();//登陆函数 void Login();//注册函数 void update(struct tm *t,int i) { (*t).hscd++; //10ms单位时间加1 cnt++; if ((*t).hscd==100) //计时满1s,进位 { (*t).hscd=0; (*t).seconds++; } if ((*t).seconds==60) //计时满一分,进位 { (*t).seconds=0; (*t).minutes++; } if ((*t).minutes==60) //计时满一小时,进位 { (*t).minutes=0; (*t).hours++; } if((*t).hours==24) //满24小时 复位 (*t).hours=0; Sleep(10); } void display(struct tm *t,int i) { //此处输出计时结果,\r为回车不换行,既一直在同一行更新时间 printf("%2d:",(*t).hours); //小时 printf("%2d:",(*t).minutes); //分钟 printf("%2d:",(*t).seconds); //秒 printf("%2d",(*t).hscd); //毫秒 printf("\t当前金额%0.1f元\r",(*t).minutes*0.1*i+i); //金额 } void time_init() //初始化时间 { time.hours=time.minutes=time.seconds=time.hscd=0; } void get_total() //时间换算 { total.hscd = cnt % 100; cnt /= 100; total.seconds = cnt % 60; cnt /= 60; total.minutes = cnt % 60; cnt /= 60; total.hours = cnt; } int main() { int a; char m; cnt = 0; time_init(); //初始化时间 fout = fopen("timeout.txt","r+"); system("color 4F"); if(fout==NULL) { fout=fopen("timeout.txt","w+"); } printf("欢迎使用停车计费系统\n"); printf("停车场采用不同车型不同单价计费\n"); printf("大车每分钟3元\n"); printf("中车每分钟2元\n"); printf("小车每分钟1元\n"); { int select; printf("1.登录 2.注册 0.退出 \n请选择"); scanf("%d",&select); switch (select) { case 0:printf("退出程序!");return 0; case 1: Rigester (); break; case 2: Login ();break; default: printf("输入错误,退出程序!\n");return 0; } } system("cls");//清屏 fp=fopen("users.txt","r+"); //打开文件 if(fp==NULL) { fp=fopen("users.txt","w+"); } fscanf(fp,"%f",&LJE); //将文件数据(剩余金额)赋予 LJE fclose(fp);//关闭文件 printf("剩余金额%0.1f元\n",LJE); printf("请选择车型\n"); printf("大车请按1\n"); printf("中车请按2\n"); printf("小车请按3\n"); scanf("%d",&a); //接收数据 switch(a)//进行判断 { case 1: i=3;break; case 2: i=2;break; case 3: i=1;break; } printf("按回车开始计时"); while(1) { m = getch(); if(m != '\r') //读入一个输入,如果是回车,那么跳出次循环 printf("输入错误,仅能输入回车键!\n"); else break; } //跳出循环 进行计时 printf("已经开始计时 \n"); while(1) { //此处检查是否有键盘输入 if(kbhit()/*监控键盘*/) { m=getch();//赋值 //如果等于回车,那么计时结束,跳出循环 if(m == '\r') break; //输入错误 else { printf("输入错误,仅支持输入回车键!\n"); } } update(&time,i); //更新计时器 函数 display(&time,i); //显示计时器时间 函数 } tmp = time; //输出最后一次即使结果,写入文件 fprintf(fout,"%d:%d:%d:%d\n",tmp.hours,tmp.minutes,tmp.seconds,tmp.hscd); get_total(); //计算总的时间,显示,并写入文件 LJE=LJE-(total.minutes*0.1*i+i);//当前剩余金额 printf("\n总时间:%2d:%2d:%2d:%2d::总金额%0.1f元 剩余金额%0.1f\n",total.hours,total.minutes,total.seconds,total.hscd,total.minutes*0.1*i+i,LJE); fprintf(fout,"统计时间:%2d:%2d:%2d:%2d::总金额%0.1f元::\n",total.hours,total.minutes,total.seconds,total.hscd,total.minutes*0.1*i+i); fp=fopen("users.txt","r+");//打开文件 fprintf(fp,"%0.1f",LJE);//记录数据(剩余金额) fclose(fp);//关闭文件 fclose(fout);//关闭文件 printf("已经保存到当前目录下的timeout.txt文件中按任意键结束!"); getch(); return 0; } int Rigester()//登陆 { FILE *fp=NULL; //文件指针 char str1[10],str2[20]; //字符串 用户名 密码 char name[10],password[10]; // 字符串 用户名 密码 int count=0,flag=0; //初始化 fp=fopen("table.txt","r");//打开文件 while(flag==0&&count<3) //判断 密码是否正确 且 输入次数是否大于3次 { printf("请输入用户名:"); scanf("%s",name); printf("请输入密码:"); scanf("%s",password); count++; //每输入一次密码和用户名 +1 rewind(fp);//文件指针指向文件头 while(!feof(fp))//判断 { fscanf(fp,"%s%s",str1,str2);//已注册的用户名和密码 if((strcmp(str1,name)==0)&&(strcmp(str2,password)==0))//与输入的用户名和密码进行比较 { flag=1;break;//相同 } } if(flag==0) printf("用户名或密码错误,请重新输入!\n"); } if (flag==1) printf("登录成功!\n"); else printf("输入超过3次,退出程序!\n"); fclose(fp); return flag;//返回flag值 进行判断 } void Login()//注册 { FILE *fp =NULL;//文件指针 char name [10],password[10]; fp=fopen("table.txt","a"); printf("请输入用户名:"); scanf("%s",name); printf("请输入密码"); scanf("%s",password); fprintf(fp,"%10s%10s",name,password); printf("注册成功\n"); fclose(fp); return; }
学到函数了。遇到两个问题。为什么实参必须初始化?为什么变量m进过函数后,没有被赋新值
#include<stdio.h> int gcd(int n,int m,int y) { for(;n!=0;m=n,n=y) y=m%n; return m; } int gcd(int n,int m,int y); int main(void) { int a,b,c=0; printf("输入两个数:"); scanf("%d %d",&a,&b); gcd(a,b,c); printf("最大公约数是:%d\n",gcd(a,b,c)); return 0; } 此程序我变量C没有初始化,就报警告。赋值0,就没事了 #include<stdio.h> int num_digits(int n) { int i=0; while(n>0){ n=n/10; i++; } return i; } int num_digits(int n); int main(void) { int m,j; printf("enter a number:"); scanf("%d",&m); j=num_digits(m); if(j==1) printf("thera is %d digit in %d\n",j,m); else printf("thera are %d digits in %d\n",j,m); return 0; } 为什么变量m经过函数num_digits(m)后,其值没有改变?体现在输出printf()函数上,显示在屏幕上是原值
C语言单步调试中cannot access memory at address...
#include <stdio.h> #include <malloc.h> #include <string.h> typedef struct books { long ISBN; //图书ISBN float BPrice; //图书定价 char BNumber[10]; //图书索引号 规定索引号为首位大写字母,后三位数字“F390” char *BName; //图书名字 char *IsBorrow; //图书借阅状态 struct books *next; }MyBooks; //初始化 void BooksInitiate(MyBooks **head) { *head=(MyBooks *)malloc(sizeof(MyBooks)); (*head)->next=NULL; (*head)->ISBN=0; /*两个结构体变量在进行赋值时,不能直接通过变量名赋值,必须通过元素赋值 */ (*head)->BPrice=0; (*head)->BNumber[10]=0; (*head)->BName=" "; (*head)->IsBorrow=" "; } //根据输入位置插入图书 int BooksInsert(MyBooks *head) { MyBooks *p,*q; struct books bk; int j,i; p=head; j=-1; printf("请输入插入图书的位置:"); scanf("%d",&i); //输入图书的存储位置 printf("请输入图书的信息:\n"); printf("***************************\n"); printf("书名:"); scanf("%s",&bk.BName); printf("\n"); printf("ISBN:"); scanf("%d",&bk.ISBN); printf("\n"); printf("定价:"); scanf("%f",&bk.BPrice); printf("\n"); printf("索引号:"); scanf("%s",&bk.BNumber[10]); printf("\n"); printf("借阅状态:"); scanf("%s",&bk.IsBorrow); printf("****************************\n"); while(p->next!=NULL&&j<i-1) { p=p->next; j++; } if(j!=i-1) { printf("插入元素位置参数错误!"); return 0; } else { q=(MyBooks *)malloc(sizeof(MyBooks)); q->ISBN=bk.ISBN; q->BPrice=bk.BPrice; q->BNumber[10]=bk.BNumber[10]; q->BName=bk.BName; q->IsBorrow=bk.IsBorrow; q->next=p->next; p->next=q; printf("插入成功!\n"); return 1; //遇到return则结束程序 } } //根据书名查找图书 int BooksGet(MyBooks *head) { MyBooks *p; char *name; name = (char*)malloc(sizeof(char) * 100); //字符指针必须申请空间才能存储 p=head; //输入查找图书的名字 printf("请输入查询图书的名字:") ; scanf("%s",name); while(p->next!=NULL&&strcmp(p->BName,name)!=0) //在进行结构体内元素比较时,结构体内的元素必须初始化 { p=p->next; } if(strcmp(p->BName,name)==0) { //输出该图书信息 printf("书名:%s\n",p->BName); printf("ISBN:%d\n",p->ISBN); printf("定价:%f\n",p->BPrice); printf("索引号:%s\n",p->BNumber[10]); printf("借阅状态:%s\n",p->IsBorrow); return 1; } else { printf("对不起,无此书信息!\n"); } } //主函数 int main() { MyBooks *head; BooksInitiate(&head); BooksInsert(head); BooksGet(head); } 求大神们,帮忙看看,我用的是Dev c++,编译器并没有报错,主要问题在BooksGet()函数里,我单步调试的时候,第一次走到while(p->next!=NULL&&strcmp(p->BName,name)!=0),p->BName是我的初始值(一个空字符串),第二次走到p->BName的时候,是我存入的那个值(也就是“亲爱的生活”),这时候把鼠标放在p->BName上时,才显示cannot access memory ataddress 0x .......了。如果 强行下一步,就会弹出错误 Program receive signal SIGSEGV,Segmentation fault。 ![![图片说明](https://img-ask.csdn.net/upload/201706/21/1498058895_781850.png)图片说明](https://img-ask.csdn.net/upload/201706/21/1498058875_823545.png)
C语言 给定一个整数序列和一个数k,求这个序列中第k小的数。
C语言 给定一个整数序列和一个数k,求这个序列中第k小的数。 我的程序 ``` #include<stdio.h> int n[10000]; void Nok() { int i=0,j=0,t,k,q=0; char c; scanf("%d",&n[i++]); c=getchar(); while(c!='\n') { scanf("%d",&n[i++]); c=getchar(); } t=i-2; k=n[i-1];//最后一个数是k while(k!=0) { for(i=0;i<=t;i++)//寻找k次最小值,每次将最小值所对应变量赋值其下一变量消掉此次最小值(最后一次不变直接输出) { if(n[i]<n[q]) { q=i; } } k--; if(k==0) printf("%d\n",n[q]); else {n[q]=n[q+1]; q++;} } } void main() { Nok(); } ``` 结果很奇怪不知道程序哪里有问题麻烦帮忙看一看
为什么我的插入、删除、计数出错,小白需要大神帮改下
#include<stdio.h> #include<stdlib.h> #define L sizeof(struct Linklist) struct Linklist { int date; struct Linklist *next;//定义了一个指向struct linklist类型数据的指针变量next,用来存放结点的地址。 }; struct Linklist *creat(); void print (struct Linklist ); void insert(struct Linklist ,int i,int x); void delet(struct Linklist ,int i); int GetElem(struct Linklist ,int i); int jishu(struct Linklist *head); struct Linklist *creat()//定义creat函数,指针类型,所以函数带回一个指针量 { printf("请输入链表数据:"); struct Linklist *head,*p,*p1; head=(struct Linklist*)malloc(L); head->next=NULL; head=p=p1=(struct Linklist*)malloc(L); scanf("%d",&p->date); int n=1; while(p->date!=0) { p=(struct Linklist*)malloc(L); scanf("%d",&p->date); p1->next=p; p1=p; n++; } p->next=NULL; return(head); } //建立链表 void print (struct Linklist *head)// struct Linklist *head是定义一个结构体指针变量head { struct Linklist *p; printf("链表数据为:"); p=head; while(p->date!=0) { printf("%d ",p->date); p=p->next; } printf("\n"); return; }//输出链表 void insert( struct Linklist *head,int i,int x) { int j=1; struct Linklist *p,*r; p=head; while(p&&j<i) { p=p->next; j++; } if(!p||j>i) printf("插入出错!"); r=(struct Linklist *)malloc(L); r->date=x; r->next=p->next; p->next=r; }//在第i个位置之前插入数据x void delet(struct Linklist *head,int i) { int j=1; struct Linklist *p,*r; p=head->next; while(p&&j<i-1) { p=p->next; j++; } if(!p||j>i-1) printf("删除出错!"); r=p->next; p->next=r->next; free(r); }//删除第i个位置上的数据 int GetElem(struct Linklist *head,int i) { int j=1,e; struct Linklist *p; p=head->next; while(p&&j<i-1) { p=p->next; j++; } if(!p||j>i) printf("查找出错!"); e=p->next->date; return(e); }//查找第i个位置上的数据是多少,并赋值给e int jishu(struct Linklist *head) { int n=0; struct Linklist *p; p=head; while(p->next!=NULL) { n++; p=p->next; n++; } return(n); }//计数,链表的个数 int main() { int m,n,k,h,e,o; struct Linklist *head; printf("请选择您要做的操作:\n1.建立链表\n2.输出链表\n3.给链表中插入数据\n4.删除链表中的数据\n5.查找链表中的数据\n6.链表中的数据计数\n\n"); head=creat(); print (head); printf("请输入插入的位置和插入的数据");//调用插入函数 scanf("%d,%d",&m,&n); insert(head, m, n); print(head); printf("\n"); printf("请输入要删除的数据的位置");//调用删除函数 scanf("%d",&k); delet( head, k); print(head); printf("\n"); printf("请输入要查找数据的位置");//调用查找函数 scanf("%d",&h); e=GetElem( head,h); printf("要查找的数据的位置在第%d个\n",&e); o=jishu( head); printf("链表中的数据有%d个\n",&o); return 0; }
对计算机专业来说学历真的重要吗?
我本科学校是渣渣二本,研究生学校是985,现在毕业五年,校招笔试、面试,社招面试参加了两年了,就我个人的经历来说下这个问题。 这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案,记得帮我点赞哦。 先说结论,无论赞不赞同,它本质就是这样:对于技术类工作而言,学历五年以内非常重要,但有办法弥补。五年以后,不重要。 目录: 张雪峰讲述的事实 我看到的事实 为什么会这样 ...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
小白学 Python 爬虫(25):爬取股票信息
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Linux基础入门 小白学 Python 爬虫(4):前置准备(三)Docker基础入门 小白学 Python 爬虫(5):前置准备(四)数据库基础 小白学 Python 爬虫(6):前置准备(...
小知识:浅谈二维码的生成和识别原理
目录 前言 条形码 静态二维码 二进制生成图形码 二维码的定位 前言 不知不觉中,我们的生活到处充满了二维码。登录账户需要二维码;加好友需要二维码;共享单车需要二维码;商品包装上也有二维码;甚至连楼下卖水果的阿姨手里都拿张二维码收款。那么,有没有想过这个二维码到底是什么东西呢?那么这个二维码的图案会不会多到不小心重合了呢? 条形码 在二维码出现之前,大行其道的...
[享学Jackson] 一、初识Jackson -- 世界上最好的JSON库
Jackson是一个简单的、功能强大的、基于Java的**应用库**。它可以很方便完成**Java对象**和**json对象(xml文档or其它格式)**进行互转。Jackson社区相对比较活跃,更新速度也比较快。Jackson库有如下几大特性: - 高性能,稳定:低内存占用,对大/小JSON串,大/小对象的解析表现均很优秀 - 流行度高:是很多流行框架的默认实现 - 容易使用:提供高层次的API,极大简化了日常使用 - 无需自己手动创建映射:内置了绝大部分序列化时和Java类型的映射关系 - 干净的JSO
卸载 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万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
推荐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 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
立即提问