为什么这个程序运行输入数据后就结束了

#include
#include

int a[50],b[50],c[50],e[50];
int i,j,m,n,k,q,p,o;

void input()
{
printf("Enter a number.\n");
scanf("%d",&m);
for(i=0;i<m;i++)
{
printf("enter number of A :\n");
scanf("%d",&a[i]);
for(j=0;j<i;j++)
if(a[i]==a[j]){
printf("error!\n");
printf("enter number of A :\n");
for(i=0;i<m;i++)
scanf("%d",&a[i]);
}
}
printf("Enter a number.\n");
scanf("%d",&m);
for(i=0;i<m;i++)
{
printf("enter number of B :\n");
scanf("%d",&b[i]);
for(j=0;j<i;j++)
if(b[i]==b[j]){
printf("error!\n");
printf("enter number of B :\n");
for(i=0;i<m;i++)
scanf("%d",&b[i]);
}
}
printf("Enter a number.\n");
scanf("%d",&m);
for(i=0;i<m;i++)
{
printf("enter number of E :\n");
scanf("%d",&e[i]);
for(j=0;j<i;j++)
if(e[i]==e[j]){
printf("error!\n");
printf("enter number of E :\n");
for(i=0;i<m;i++)
scanf("%d",&e[i]);
}
}
}

void jiao()
{
k=0;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
if(a[i]==b[j])
c[k++]=a[i];
}
p=k;
printf("交集为:\n");
for(k=0;k<p;k++)
printf("%d",c[k]);
printf("\n");
}

void bing()
{
k=0;
for(q=0;q<p;q++)
c[q]=0;
for(i=0;i<m;i++)
{
c[k]=a[i];
k++;
}
for(i=0;i<n;i++)
for(j=0;j<k;j++)
{
if(b[i]==c[j])
break;
if(j==k-1)
{
c[k]=b[i];
k++;
}
}
p=k;
printf("并集为: \n");
for(k=0;k<p;k++)
printf("%d",c[k]);
printf("\n");
}

void cha()
{
k=0;
for(q=0;q<p;q++)
c[q]=0;
for(j=0;j<m;j++)
for(i=0;i<n;i++)
{
if(a[j]==b[i])
break;
if(j==n-1)
{
c[k]=a[i];
k++;
}
}
p=k;
printf("差集为: \n");
for(k=0;k<p;k++)
printf("%d",c[k]);
printf("\n");
}

void bu()
{
k=0;
for(q=0;q<p;q++)
c[q]=0;
for(i=0;i<o;i++)
for(j=0;j<m;j++)
{
if(e[i]==a[j])
break;
if(j==m-1)
{
c[k]=e[i];
k++;
}
}
p=k;
printf("补集为: \n");
for(k=0;k<p;k++)
printf("%d",c[k]);
printf("\n");
}

int main()
{
input();
jiao();
bing();
cha();
bu();
return 0;
}
是不是因为输入函数的数据没有在其他函数中体现,如果是的话要从哪方面改呢

2个回答

return 0;
前面加上
system("pause");

qq_31985497
qq_31985497 真的可以输出了!不过加完这个以后只有输出一个并集,而且还是错的,我感觉子函数没错啊。。
3 年多之前 回复

return前加一个getch()函数,使用IO阻塞就可以了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
代码没有错误,为什么程序没运行完就直接结束了?
![图片说明](https://img-ask.csdn.net/upload/201908/08/1565246195_162168.png) ![图片说明](https://img-ask.csdn.net/upload/201908/08/1565246218_224284.png) ``` //主要功能:实现带小数二进制和十进制之间数据的转换 #include <iostream.h> #include <windows.h> #include <fstream.h> #include <string> #include <math.h> using namespace std; const int TAILMAXLENTH=10;//定义十进制转换成二进制小数部分最大位数 const int DABAMAXLENTH=40;//定义原始数据的最大长度 const double ADDMENBERNUM=111.11;//定义一个加数用于检测数据真实可用 /********************************************************************************************************* *栈的部分 *********************************************************************************************************/ class Stack;//类Stack的声明 /* 定义一个链栈结点类Stacknode */ class Stacknode { friend class Stack;//申请友元类 private: Stacknode(Stacknode *nextp=NULL);//构造函数 Stacknode(int &newdata,Stacknode *nextp=NULL);//构造函数 int data;//数据元素 Stacknode *next;//递归定义指向后继结点的指针 }; /* Stacknode的实现部分 */ Stacknode::Stacknode(Stacknode *nextp)//构造函数 { next=nextp; } Stacknode::Stacknode(int &newdata,Stacknode *nextp)//构造函数 { data=newdata; next=nextp; } //结点类Stacknode的定义结束 /* 定义一个链栈类Stack */ class Stack { public: Stack();//创建一个空栈 ~Stack();//回收一个栈 void clear();//销毁一个栈 bool empty() const;//确定栈是否已空 bool push(int &item);//把数据压进栈 bool pop();//出栈 bool top(int &item) const;//取出栈顶元素 private: Stacknode *newnode(Stacknode *nextp=NULL); Stacknode *newnode(int &item,Stacknode *nextp=NULL);//创建新的结点 Stacknode *Stacktop; int Stacklength; }; /* Stack的实现部分 */ Stacknode *Stack::newnode(Stacknode *nextp)//创建新的结点,不带数据 { return new Stacknode(nextp); } Stacknode *Stack::newnode(int &item,Stacknode *nextp)//创建新的结点,数据域赋值 { return new Stacknode(item,nextp); } //以下为栈类Stack的函数定义 Stack::Stack()//创建一个空栈 { Stacktop=newnode();//创建一个栈顶指针初始化,相当于Stacktop=NULL;本链表没有用头结点 Stacklength=0; } Stack::~Stack()//回收一个栈 { clear(); delete Stacktop;//释放栈底 } void Stack::clear()//销毁一个栈 { //while(pop());//不停地出栈,而每次释放空间在出栈函数中完成 Stacknode *usednodep;//定义指针usednodep,准备指向出栈的结点 while(Stacktop->next!=NULL) { usednodep=Stacktop;//指向出栈的结点 Stacktop=Stacktop->next;//栈顶指针后移 delete usednodep;//释放空间 } } bool Stack::empty() const//确定栈是否已空 { return Stacklength<=0?true:false; } bool Stack::push(int &item)//数据进栈 { Stacknode *newnodep;//定义指针newnodep,准备指向申请的新结点 newnodep=newnode(item,Stacktop);//申请新结点,把数据存入,把指针域指向头指针 if(!newnodep)//如果没有申请到空间,返回失败 return false; Stacktop=newnodep;//改链,完成进栈 Stacklength++;//栈的长度增加 return true;//本次操作成功 } bool Stack::pop()//出栈,不要栈顶数据 { Stacknode *usednodep;//定义指针usednodep,准备指向出栈的结点 if(!empty())//判断是否栈空 { usednodep=Stacktop;//指向出栈的结点 Stacktop=Stacktop->next;//栈顶指针后移 // delete usednodep;//释放空间 Stacklength--;//栈的长度减少 return true;//本次操作成功 } return false;//否则本次操作失败 } bool Stack::top(int &item) const//取出栈顶数据返回去 { if(!empty())//如果栈不空,记录当前栈顶元素 { item=Stacktop->data;//通过item返回去 return true;//本次操作成功 } return false;//否则本次操作失败 } /********************************************************************************************************* *队列的部分 *********************************************************************************************************/ /* 定义一个结点类node */ class node { public: int data; node *next; }; /* 定义一个链队类Queue */ class Queue { private: node *rear; node *front; protected: int count;//计数器,统计结点个数即线性队列的长度 public: Queue();//构造函数 ~Queue();//析构函数 void clear(void);//清空链队 bool empty(void) const;//判断是否空队 bool retrieve(int &item) const;//读取队头 bool append(const int &item);//数据入队 bool serve();//数据出队 }; /* 类Queue的实现部分 */ Queue::Queue()//构造函数 { front=new node;//申请新结点,作为队头结点 front->next=NULL; rear=front;//队尾指针指向队头 count=0;//计数器清零,队列开始时没有实际数据 } Queue::~Queue()//析构函数 { clear();//删除所有数据,释放所有结点 delete front;//把头结点也释放掉 count=0;//计数器清零,队列开始时没有实际数据 } void Queue::clear(void)//清空链队 { node *searchp=front->next,*followp=front;//初始化两个指针 while(searchp!=rear) { followp=searchp; searchp=searchp->next; delete followp; } front->next=NULL;//保留了最后一个结点,就是头结点,并且链域置为空 rear=front; count=0;//计数器也清零 } bool Queue::empty(void) const//判断是否空链 { return count==0?true:false; } bool Queue::retrieve(int &item) const//读取队头 { if(empty())//处理意外 return false; item=front->next->data;//返回读取的数据 return true;//本次操作成功 } bool Queue::append(const int &item)//进队 { node *newnodep=new node; newnodep->data=item;//给数据赋值 rear->next=newnodep;//这一步可以看出有头结点 rear=rear->next;//改动队尾指针的位置 count++;//计数器加1 return true; } bool Queue::serve()//出队 { if(empty())//空队处理 return false; node *tempp=front->next; // item=tempp->data;//保存数据 front->next=tempp->next;//改变指针 delete tempp;//释放该结点 count--;//计数器减1 return true; } /********************************************************************************************************* *定义一个功能类NumSysConversion *********************************************************************************************************/ class NumSysConversion { private: int inter; float floater; Stack *stack; Queue *queue; public: NumSysConversion();//构造函数 ~NumSysConversion();//析构函数 bool check(char *array,int number);//检查输入数据是否符合要求 void change(char *array,int number);//将原始数据转化成数值 double change_to_aim(int tokind);//将原始数据转化成目标进制的数据 }; NumSysConversion::NumSysConversion()//构造函数 { stack=new Stack; queue=new Queue; inter=0; floater=0; } NumSysConversion::~NumSysConversion()//析构函数 { delete stack; delete queue; } bool NumSysConversion::check(char *array,int number)//检查输入数据是否符合要求 { bool flag=true; for(int i=0;array[i]!='\0';i++) { cout<<array[i]; if(array[i]-48>=number) { flag=false; break; } } return flag; } void NumSysConversion::change(char *array,int number)//将原始数据转化成数值 { int flag=0,j=0; for(int i=0;array[i]!='\0';i++) { if(array[i]=='.') { flag=1; continue; } if(flag==0)//取整数数据 inter=inter*number+array[i]-48; if(flag==1)//取小数数据 floater+=(float)(((int)array[i]-48)*(float)pow(number,--j)); } } double NumSysConversion::change_to_aim(int tokind)//将原始数据转化成目标进制的数据 { int count=0,temp,flag=0,num; double resnumb=0; //第一步:先将整数部分转换进制后的数据依次入栈 while(inter) { num=inter%tokind; stack->push(num); inter/=tokind; } //第二步:再将小数部分转换进制后的数据依次入队 while(floater&&count<TAILMAXLENTH) { queue->append(int(floater*tokind)); floater*=tokind; if(floater>=1) floater-=(int)floater; count++; } //第三步:显示栈和队中的数据并将其转换成可用数据 cout<<"数据转换后为:"; while(!stack->empty()) { stack->top(temp); stack->pop(); cout<<temp; resnumb=resnumb*tokind+temp; flag=1; } if(!queue->empty()) { if(flag==0) cout<<"0"; cout<<"."; count=-1; } while(!queue->empty()) { queue->retrieve(temp); queue->serve(); cout<<temp; resnumb+=temp*pow(tokind,count--); } cout<<endl; //第四步:清空栈和队中的数据 stack->clear(); queue->clear(); inter=0; floater=0; //第五步:将可用数据信息返回 return resnumb; } /* 定义一个实现进制转换功能的菜单处理类interfacebase */ class interfacebase { private: NumSysConversion NumSysConversiononface; public: void clearscreen(void);//清屏 void showmenu(void);//显示菜单函数 int userchoice(void);//用户的选项 void processmenu(int menuchoice);//菜单函数 }; /* 类interfacebase的实现部分 */ void interfacebase::clearscreen(void) { system("cls"); } void interfacebase::showmenu(void) { cout<<"进制转换功能菜单"<<endl; cout<<"================"<<endl; cout<<"1.十进制转换为二进制"<<endl; cout<<"2.二进制转换为十进制"<<endl; cout<<"0.结束程序"<<endl; cout<<"================"<<endl; } int interfacebase::userchoice(void) { int menuchoice; cout<<"请输入您的选择:"; cin>>menuchoice; return menuchoice; } void interfacebase::processmenu(int menuchoice) { switch(menuchoice)//根据用户的选择进行相应的操作 { case 1: { char array[10]={'0','.','1','2','5'}; int number=10; if(NumSysConversiononface.check(array,number)) cout<<"符合要求!"<<endl; else cout<<"不符合要求!"<<endl; NumSysConversiononface.change(array,number); cout<<NumSysConversiononface.change_to_aim(2)<<endl; cout<<"进制转换成功!"<<endl; } break; case 2: { char array[10]={'1','1','1','1'}; int number=2; if(NumSysConversiononface.check(array,number)) cout<<"符合要求!"<<endl; else cout<<"不符合要求!"<<endl; NumSysConversiononface.change(array,number); cout<<NumSysConversiononface.change_to_aim(10)<<endl; cout<<"进制转换成功!"<<endl; } break; case 0: exit(0); default: cout<<"对不起,您输入的功能编号有错!请重新输入!!!"<<endl; break; } } /* 程序主入口 */ void main(void) { int menuchoice;//定义变量,菜单选单项的选择 interfacebase interfacenow; system("color f0");//修改屏幕的背景色和字的颜色 interfacenow.clearscreen();//清屏 while(1)//永真循环 { interfacenow.showmenu();//显示菜单 menuchoice=interfacenow.userchoice();//获取用户的选择 interfacenow.processmenu(menuchoice);//处理用户的选择 system("pause");//暂停 interfacenow.clearscreen();//清屏 } }//主函数结束 ```
求助,为什么只能输入一组数据??
模拟手机通讯录管理系统,实现对通讯录进行管理。 需要对联系人姓名、电话进行管理,利用结构体变量记录联系人的姓名、电话,建立单向链表来存放联系人的信息。 要求实现如下功能: (1)写函数create()实现建立单链表来存放联系人的信息, 如果输入大写‘Y’字符则继续创建结点存储联系人信息,否则按任意键结束输入。 (2)写自定义函数输出链表中联系人信息。 (3)写自定义函数查询联系人的信息。 (4)写自定义函数释放链表所占内存。 (在主函数依次调用各函数即可) 结构体类型定义如下: struct friends { char name[20]; char phone[12]; struct friends*next; }; 程序运行示例1: 请依次输入每个联系人姓名,电话: wu 13623456 是否继续输入,按Y键继续输入,其他键就结束. Y 请依次输入每个联系人姓名,电话: zhang 34567812 是否继续输入,按Y键继续输入,其他键就 */ #include<stdio.h> #include<stdlib.h> struct friends { char name[20]; char phone[12]; struct friends*next; }; struct friends*create() { struct friends*pHead=NULL,*pNew=NULL,*pTail=NULL; int i=0; char a; for(i=0;i<100;i++) { printf("请依次输入每个联系人姓名,电话:\n"); pNew=(struct friends*)malloc(sizeof(struct friends*)); gets(pNew->name); gets(pNew->phone); if(pHead==NULL) pHead=pNew; else pTail->next=pNew; pTail=pNew; pNew->next=NULL; printf("是否继续输入,按Y键继续输入,其他键就结束.\n"); a=getchar(); if(a!='Y') break; } return pHead; } int main() { struct friends *p; p=create(); /*while(p!=NULL) { printf("%c %c",p->name,p->phone); p=p->next; }*/ return 0; }
数据结构 输入以后程序自动结束 scanf
这个程序,在我输入以后就自动结束,然后工作台直接关闭了,连“我并不觉得”都没有输出,请问出了什么问题呢?我找到问题是出在截图中的scanf那里,就这一行输入之后几秒就结束运行了,麻烦大家看看我为什么输入错误了,以及怎么输入才行? ``` #include <stdio.h> #include <stdlib.h> #define SIZE 100 #define STACKINCREAMENT 10 typedef int Status; typedef struct{ int *base; int *top; int stacksize; }Sqstack; Sqstack InitStack(){ Sqstack s; s.base=(int *)malloc(sizeof(int)*SIZE); if(!s.base) exit(0); s.top=s.base; s.stacksize=SIZE; return s; } Sqstack Push(Sqstack s, int e){ if(s.top-s.base>=s.stacksize){ s.base=(int *)realloc(s.base,(s.stacksize+STACKINCREAMENT)*sizeof(int)); if(!s.base) exit (0); s.top=s.base+s.stacksize; s.stacksize+=STACKINCREAMENT; } *(s.top)=e; s.top++; return s; } int GetTop(Sqstack s){ int e; if(s.top==s.base) return 0; e=*(s.top-1); return e; } Sqstack Pop(Sqstack s){ if(s.top==s.base) return s; s.top--; return s; } int main(){ char *input; char a; int i,j,k,e,error1=0,error2=0,t; i=j=k=0; Sqstack s,r; s=InitStack(); r=InitStack(); printf("请输入你要检测的字符串。#结束\n"); fflush(stdin);scanf("%s",input);printf("%s",input);getchar(); printf("我并不觉得!\n"); while(*input!='#'){ printf("今天天气好!\n"); s.top=s.base; error1=0; error2=0; i=j=k=0; t=0; a=*(input+t); while(a!='\0'){ switch(a){ printf("你是傻逼吧!\n"); case '(': s=Push(s,1); i++; break; printf("嘿嘿嘿嘿嘿!\n"); case '[': s=Push(s,2); j++; break; case '{': s=Push(s,3); k++; break; case ')': e=GetTop(s); if(e!=1) error1++; else { i--; if(i>0) error2++; s=Pop(s); } break; case ']': e=GetTop(s); if(e!=2) error1++; else { j--; if(i>0||j>0) error2++; s=Pop(s); } break; case '}': e=GetTop(s); if(e!=3) error1++; else { k--; if(i>0||j>0||k>0) error2++; s=Pop(s); } break; default:break; }//switch t++; a=*(input+t); printf("哈哈哈哈哈!\n"); }//while a if(error1||s.top!=s.base) printf("不匹配!\n"); else { printf("正常\n"); if(error2>0) printf("不匹配\n"); else printf("正常\n"); } printf("请输入你要检测的字符串。#结束\n"); fflush(stdin);scanf("%s",input);getchar(); }//while input return 0; } ``` ![图片说明](https://img-ask.csdn.net/upload/201906/11/1560252616_974234.png)
求帮忙 用c++写出这一段程序
9.飞机订票 问题描述: 某公司每天有航班信息包括:姓名、身份证号、航班号、座位号、价格。设计一程序,完成以下功能: 1) 系统以菜单方式工作(用键盘输入1~7之间的数来选择功能,其中7为退出); 2) 订票(输入8——10条记录):输入乘客信息(姓名、身份证号、航班号、座位号,价格); 3) 能从指定菜单选项中读取飞机订票所有的信息; 4) 查询指定 “航班号”的飞机票的价格; 5) 根据“航班号”统计并显示该航班的乘客人数; 6) 根据“航班号”修改该航班的价格; 7) 退票:输入乘客的姓名、航班号完成退票功能(即删除该记录); 8) 所有数据符合实际应用要求。 题目要求 1) 按分析、设计、编码、调试和测试的软件开发过程完成这个应用程序。 2) 为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。 3) 界面应友好,操作应流畅。 输入要求 应用程序运行后,在屏幕上显示一个菜单。用户可以根据需求,选定相应的操作项目。进入每个操作后,一般应有相应的子菜单,或有相应的提示信息,根据提示信息的要求,从键盘或文件输入相应的信息。 输出要求 1) 应用程序运行后,要在屏幕上显示一个菜单。 2) 要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。 提示 设计一个结构体类型和一维数组类型,用来存放飞机订票的基本信息。
C语言怎样编写程序运行完后,不自动结束,而是返回程序的开始的主菜单?
我的程序运行完一个功能后按任意键就退出了,而不是返回主菜单 代码如下,应该怎么改?(具体一点,菜鸟一个)多谢! #include<stdio.h> #include<stdlib.h> #include<string.h> #include <windows.h> #include<conio.h> #define LENTEL sizeof(tel) #define ID struct tel struct tel { char name[15]; char tele[11]; char style[15]; char mail[20]; ID * next; }; ID *id = NULL; /*读取telephone.txt文件中的内容创建学生链表*/ ID* create() { ID *head; ID *p1,*p2; p2 = (ID*)malloc(LENTEL); head = p2; FILE *fp; if((fp = fopen("telephone.txt","r")) == NULL) { printf("联系人文件打开错误,请将telephone.txt放置与程序同一目录下!\n"); exit(0); } while(!feof(fp)) { p1 = (ID*)malloc(LENTEL); fscanf(fp,"%s%s%s%s",p1->name,p1->tele,p1->style,p1->mail); p1->next = NULL; p2->next = p1; p2 = p1; } fclose(fp); return head; } ID* findbyname(char name[]) { ID* p = id; ID* temp = NULL; while (p!=NULL) { if(strcmp(name,p->name) == 0) { temp = p; break; } else { p = p->next; } } return temp; } ID* findbytele(char tele[]) { ID* p = id; ID* temp = NULL; while (p!=NULL) { if(strcmp(tele,p->tele) == 0) { temp = p; break; } else { p = p->next; } } return temp; } /*判断这个联系人是否存在*/ bool Istel(char name[]) { ID *p = id->next; bool flag = false; while (p != NULL) { if(strcmp(p->name,name) == 0) { flag = true; } p=p->next; } return flag; } int add() { menu(); ID *newtel = NULL; ID *p = id; char tel_name[15]; char tel_tele[11]; char tel_style[15]; char tel_mail[20]; printf("\n------- 请输入学生基本信息 --------\n"); printf("姓名 电话 类别 邮箱\n"); printf("--------------------------------------\n"); scanf("%s%s%s%s",tel_name,tel_tele,tel_style,tel_mail); if(!Istel(tel_name)) { newtel = (ID*)malloc(LENTEL); strcpy(newtel->name,tel_name); strcpy(newtel->tele,tel_tele); strcpy(newtel->style,tel_style); strcpy(newtel->mail,tel_mail); newtel->next = NULL; for(p=p->next; p->next!=NULL; p=p->next); p->next = newtel; printf("\n联系人已添加成功!\n"); } else { printf("\n该联系人姓名已存在!\n"); } getch(); return 0; } void Print_Inquire_All() { void menu_print_out(); ID *p1 = id->next; menu_print_out(); while (p1!=NULL) { printf("%s\t%s\t%s\t%s\n",p1->name,p1->tele,p1->style,p1->mail); p1 = p1->next; } system("pause"); } void menu_print_out() { printf("\n---------------------------------\n"); printf("\n---------------------------------\n"); } /*主菜单*/ void menu(void) { void ReadBack(); printf(" ╭════════╮ \n"); printf("╭══════╣通讯管理系统V1.0╠══════╮\n"); printf("║ ╰════════╯ ║\n"); printf("║ 【1】添加数据 【3】退出系统 ║\n"); printf("║ ║\n"); printf("║ 【2】查询数据 ************* ║\n"); printf("║ ║\n"); printf("╰══════════════════════╯\n"); printf("◎请输入功能前的序号进入相应的工具:【 】\b\b"); int a = 0; a = getchar(); while(a!='1'&&a!='2'&&a!='3') { printf("error! please input the right number!\n"); putchar('\a'); getchar(); printf("◎请重新输入功能前的序号进入相应的工具:【 】\b\b"); a = getchar(); } switch(a) { case '1': add(); break; case '2': Print_Inquire_All(); case '3': ReadBack(); exit(0); break; } getchar(); } /*退出程序时将数据写回telephone.txt进行更新*/ void ReadBack() { FILE *TEL = fopen("telephone.txt","w"); ID *te = id->next; while (te != NULL) { fwrite((char*)&id,sizeof(ID),1,TEL); te = te->next; } fclose(TEL); } void Lunch() { id = create(); menu(); } void main() { SetConsoleTitle("C语言通讯录管理系统"); Lunch(); }
简单的矩阵转置,不知道为什么运行到scanf输入数据就出错,请问为什么?
#include<stdio.h> void MatrixAllocate(int x,int y,int **p) { int i; p=new int*[x]; //这里动态分配一维指针的内存空间,并把这一组一维指针的首地址赋给二维指针p if(p==NULL)printf("error1\n"); for(i=0;i<x;i++) { p[i]=new int[y]; //再利用new分配一个一维数组,并且把其首地址赋给这一组一维指针 if(p[i]==NULL)printf("error2\n"); } } void input(int x,int y,int**p,int**pb1) { int i,j; pb1=p; for(i=0;i<x;i++) { for(j=0;j<y;j++) { printf("ok\n"); scanf("%d",&p[i][j]); //不知道为什么运行到这就出错 } } } void MatrixTranspose(int x,int y,int**p1,int**p2,int**pb2,void(*p3)(int,int,int**)) { int i,j; (*p3)(y,x,p2); pb2=p2; for(i=0;i<x;i++) { for(j=0;j<y;j++) { p2[j][i]=p1[i][j]; } } } void MatrixPrint(int x,int y,int**p) { int i,j; for(i=0;i<y;i++) { for(j=0;j<x;j++) { printf("%d",&p[i][j]); } printf("\n"); } } void ReleaseMatrix(int x,int y,int**p1,int**p2) { int i; for(i=0;i<x;i++) { delete[]p1[i]; } delete[]p1; for(i=0;i<y;i++) { delete[]p2[i]; } delete[]p2; } int main() { int m,n,**pMatrix,**pMatrix1,**pcp1,**pcp2; void(*pMA)(int,int,int**)=MatrixAllocate; puts("请指定矩阵行列数:"); printf("行数 m="); scanf("%d",&m); printf("列数 n="); scanf("%d",&n); puts("创建矩阵空间"); MatrixAllocate(m,n,pMatrix); puts("给矩阵录入数据"); input(m,n,pMatrix,pcp1); puts("开始矩阵转置操作"); MatrixTranspose(m,n,pMatrix,pMatrix1,pcp2,MatrixAllocate); puts("输出转置后的矩阵"); MatrixPrint(m,n,pMatrix1); puts("释放矩阵空间,并结束应用程序"); ReleaseMatrix(m,n,pcp1,pcp2); return 0; }
求解不用VC运行程序后出现断言失败的问题
这段C语言程序是C语言课的一个实训作业 在编译器中可以正常运行,但是当想通过exe文件直接打开时,在选择从文件导入这一环节会出现断言失败的提示,截图如下![图片说明](https://img-ask.csdn.net/upload/201906/29/1561803504_905506.png) 上面说是fscanf函数断言失败,之前遇到这种问题都是因为文件打开失败,但是这个程序在编译器里文件就能打开,直接用应用文件就会失败,这是什么原因呢?求教大佬 从文件导入的函数如下 ``` int myInsert_to_file() {STUlist*p1; FILE*fp1; p1=head; fp1=fopen("USER\\Allclass.txt","w+"); while(p1!=NULL) {fprintf(fp1,"%lu %d %s\n",p1->number,p1->Class,p1->name ); p1=p1->next ; } fclose(fp1); return 1; } ``` 主调函数如下 ``` #include "mydelete.h" #include "myinsert.h" #include "mysearch.h" #include "mybuild.h" #include <stdlib.h> #include <string.h> extern STUlist*head; int main() { int choice1,choice2; char China[10];//输入汉字用 unsigned long int number; enum symbol1{del=1,inse,seek,change,out}; enum symbol2{hand=1,file}; printf("******************\n欢迎来到学生证管理系统\n******************\n"); printf("删除文件,请键入1\n添加文件,请键入2\n查找信息,请键入3\n修改信息,请键入4\n将信息导入文件,请键入5\n"); part1 :printf("请输入您的选择:"); scanf("%d",&choice1); printf("\n"); getchar();//吸收回车 if(head==NULL)//检索数据库中是否有数据 {printf("检索到数据库为空,是否添加数据?(输入 是or否)"); scanf("%s",&China); if(strcmp(China,"否")==0) exit(0);//退出文件 else if(strcmp(China,"是")==0) {printf("请选择输入文件的方式\n若手动添加,则键入1\n若从文件导入,则键入2\n"); scanf("%d",&choice2); switch(choice2) {case hand://手动输入 { printf("输入格式为:\n学生证号:\n班级:\n姓名:\n若输入结束,则在本次输入的姓名处加#\n"); printf("范例:\n20185527\n1\n郭雨龙#\n"); myBuild_hand();//进行手动输入数据 }break;//选择hand的下括号 case file://文件输入 { myBuild_file(); printf("**********\n导入完成\n**********\n");}break; }//switch的下括号 goto part1; }//选择是的elseif的下括号 else {printf("ERROR!!\n请重新输入"); goto part1;}//选择不是‘是’或‘否’的else的下括号 }//检索数据库中是否有数据的下括号 switch(choice1) { case del: {printf("删除:请输入学生证编号"); scanf("%d",&number); if(number>99999999||number<10000000)//输入的学生证号码位数有误 printf("**********\nERROR:输入的学生证号码位数有误\n**********\n"); else {if(myDelete(number)!=0) printf("**********\n删除完成\n**********\n"); else printf("**********\nERROR:未找到此信息!\n**********\n");} goto part1;}break; case inse:{ myInsert(); printf("**********\n插入完成\n**********\n"); goto part1;}break; case seek: {int seek_choice; enum{seek_person=1,seek_class}; printf("**********\n查询个人信息,请键入1\n查询班级,请键入2\n**********\n"); scanf("%d",&seek_choice); switch(seek_choice) {case seek_person: {printf("请输入学生证号"); scanf("%lu",&number); if(number>99999999||number<10000000)//输入的学生证号码位数有误 printf("**********\nERROR:输入的学生证号码位数有误\n**********\n"); else { if(mySearch(number)!=0) printf("**********\n查找完成\n**********\n"); else printf("**********\nERROR:未找到此条信息!\n**********\n");} goto part1;//结束则返回最初 }break; case seek_class: {int the_class; printf("请输入班级号(1~5)\n"); scanf("%d",&the_class); if(the_class<1||the_class>5)//输入的班级码有误 printf("**********\nERROR:输入的班级码有误\n**********\n"); else {if(mySearch_class(the_class)!=0) printf("**********\n查找完成\n**********\n"); else printf("**********\nERROR:未找到此条信息!\n**********\n");} goto part1;//结束则返回最初 }//seekclass的下括号 }//seekswitch的下括号 }//caseseek的下括号 case change: {printf("请输入学生证号"); scanf("%lu",&number); mychange(number); printf("**********\n重置成功\n**********\n"); goto part1; }break; case out: {myInsert_to_file(); printf("**********\n已将现有信息导入文件\n**********\n"); goto part1; }break; default:{printf("**********\nERROR:您输入的信息有误!\n**********\n\n"); goto part1; }break; } return 0; }//主函数的下括号 ```
fprintf输出到文本之后会有一串代码结束。
**论坛也发了贴,根据他的回答我改了我的程序,然而运行完一遍之后还是一样有一串不明代码,codeblocks也不报警告了。我把我完整的程序放上来,大概有500行,每个功能用完之后都会出现这个问题,我必须吧乱码删了才能继续下一个功能。网友告诉我函数后面要加return ;但是我试了下发现程序直接结束了,不会再跳到主函数,所以我只能用main()来进行返回主菜单的功能** ![图片说明](https://img-ask.csdn.net/upload/201912/12/1576131963_428559.png) ``` #include<stdio.h> #include<stdlib.h> #include<string.h> struct course { int num; /*课程编号*/ char name[30]; /*课程名称*/ char kind[20]; /*课程性质*/ int time; /*课时*/ int mark; /*学分*/ int term; /*1为考试2为考察*/ int opterm; /*开课学期*/ }; typedef struct Node /*创建头结点*/ { struct course d; struct Node *next; }Node; /*课程插入*/ void insert() { FILE *fp1; int g=1,key=0,key1=0,f=0; int a=0,b=0; if((fp1=fopen("course.txt","r"))==NULL) { printf("can't open file\n"); exit(0); } Node *first=(Node *)malloc(sizeof(Node)); /*头指针初始化*/ first->next=0; for(;!feof(fp1);) { Node *s=(Node*)malloc(sizeof(Node)); fscanf(fp1,"%d%s%s%d%d%d%d",&s->d.num,s->d.name,s->d.kind,&s->d.time,&s->d.mark,&s->d.term,&s->d.opterm); s->next=first->next; first->next=s; } for(;g==1;) { printf("请输入需要插入的课程信息:\n课程编号,课程名称,课程性质,课时,学分,1为考试2为考察,开课学期\n"); Node *e=(Node*)malloc(sizeof(Node)); scanf("%d%s%s%d%d%d%d",&e->d.num,e->d.name,e->d.kind,&e->d.time,&e->d.mark,&e->d.term,&e->d.opterm); e->next=first->next; first->next=e; printf("是否继续输入?1为是,2为否\n"); key=0; while(key==0){ scanf("%d",&g); if(g==1||g==2) key=1; else {printf("\n输入错误,请重新输入!!!\n"); printf("是否继续输入?1为是,2为否\n");} } } fclose(fp1); printf("是否存盘??1为是2为否\n"); while(key1==0){ scanf("%d",&f); if(f==1||f==2) key1=1; else printf("\n输入错误,请重新输入!!!\n"); } if(f==1) { if((fp1=fopen("course.txt","w"))==NULL) { printf("can't open file\n"); exit(0); } Node *p=first->next; while(p!=0){ fprintf(fp1,"%5d%12s%9s%9d%9d%11d%11d\n",p->d.num,p->d.name,p->d.kind,p->d.time,p->d.mark,p->d.term,p->d.opterm); p=p->next; } } printf("录入完毕\n"); Node *k=first; while(first!=0){ first=first->next; free(k); k=first; } fclose(fp1); while(b==0){ printf("\n1-返回主菜单;2-退出系统\n"); scanf("%d",&a); if(a==1||a==2) b=1; else printf("\n输入错误,请重新输入!!!\n"); } if(a==1) return main(); else exit(0); } /*课程浏览ok的,从文本文件中输入数据浏览*/ void browser() { FILE *fp2; struct course c; int a=0,b=0; if((fp2=fopen("course.txt","r"))==NULL) { printf("\ncan't open course!\n"); exit(0); } printf("课程编号 课程名称 课程性质 总学时 学分 考试课1或考察课2 开课学期:\n"); while(!feof(fp2)) { fscanf(fp2,"%d%s%s%d%d%d%d",&c.num,c.name,c.kind,&c.time,&c.mark,&c.term,&c.opterm); printf("%5d%12s%9s%9d%9d%11d%11d\n",c.num,c.name,c.kind,c.time,c.mark,c.term,c.opterm); } fclose(fp2); printf("\n结果已全部显示!!!!\n"); while(b==0){ printf("\n1-返回主菜单;2-退出系统\n"); scanf("%d",&a); if(a==1||a==2) b=1; else printf("\n输入错误,请重新输入!!!\n"); } if(a==1) return main(); else exit(0); } /*课程查询ok的,从文本文件中输入数据判断查询*/ void search() { FILE *fp3; struct course c; int score; char kind[10]; int b=0,e=0,a=0,d=0; while(e==0){ printf("1.按课程编号查询,2.按课程名称查询.\n"); printf("请选择查询方式并输入选项数字:"); scanf("%d",&b); if(b==1||b==2) e=1; else printf("\n输入错误,请重新输入!!!\n"); } if(b==1) { printf("\n请输入您要查询的课程编号:\n"); scanf("%d",&score); if((fp3=fopen("course.txt","r"))==NULL) { printf("\nCannot open course!\n"); exit(0); } printf("课程编号 课程名称 课程性质 总学时 学分 考试课1或考察课2 开课学期:\n"); for(;!feof(fp3);) { fscanf(fp3,"%d%s%s%d%d%d%d\n",&c.num,c.name,c.kind,&c.time,&c.mark,&c.term,&c.opterm); if(c.mark==score) printf("%5d%12s%9s%9d%9d%11d%11d\n",c.num,c.name,c.kind,c.time,c.mark,c.term,c.opterm); } } else {printf("\n请输入您要查询的课程名称:\n"); scanf("%s",kind); if((fp3=fopen("course.txt","r"))==NULL) { printf("\nCannot open course!\n"); exit(0); } printf("课程编号 课程名称 课程性质 总学时 学分 考试课1或考察课2 开课学期:\n"); for(;!feof(fp3);) { fscanf(fp3,"%d%s%s%d%d%d%d\n",&c.num,c.name,c.kind,&c.time,&c.mark,&c.term,&c.opterm); if(strcmp(c.kind,kind)==0) printf("%5d%12s%9s%9d%9d%11d%11d\n",c.num,c.name,c.kind,c.time,c.mark,c.term,c.opterm); } } fclose(fp3); printf("\n结果已全部显示!!!!\n"); while(d==0){ printf("\n1-返回主菜单;2-退出系统\n"); scanf("%d",&a); if(a==1||a==2) d=1; else printf("\n输入错误,请重新输入!!!\n"); } if(a==1) return main(); else exit(0); } /*课程修改*/ void revise()/*修改函数的名字*/ { int a=0,b=0; int h,f; int key1=0; FILE *fp4; if((fp4=fopen("course.txt","r"))==NULL) { printf("\nCannot open course!\n"); exit(0); } Node *first=(Node *)malloc(sizeof(Node)); /*头指针初始化*/ first->next=0; /*工作指针*/ for(;!feof(fp4);) { Node *s=(Node*)malloc(sizeof(Node)); fscanf(fp4,"%d%s%s%d%d%d%d",&s->d.num,s->d.name,s->d.kind,&s->d.time,&s->d.mark,&s->d.term,&s->d.opterm); s->next=first->next; first->next=s; } printf("请输入需要修改的课程编号\n"); scanf("%d",&h); Node *p=first->next; while(p!=0){ if(h==p->d.num) { printf("课程编号 课程名称 课程性质 总学时 学分 考试课1或考察课2 开课学期:\n"); printf("%5d%12s%9s%9d%9d%11d%11d\n",p->d.num,p->d.name,p->d.kind,p->d.time,p->d.mark,p->d.term,p->d.opterm); printf("请输入替换的正确的课程信息\n"); scanf("%d%s%s%d%d%d%d",&p->d.num,p->d.name,p->d.kind,&p->d.time,&p->d.mark,&p->d.term,&p->d.opterm); } else ; p=p->next; } printf("是否存盘??1为是2为否\n"); while(key1==0){ scanf("%d",&f); if(f==1||f==2) key1=1; else printf("\n输入错误,请重新输入!!!\n"); } if(f==1) { fclose(fp4); if((fp4=fopen("course.txt","w"))==NULL) { printf("can't open file\n"); exit(0); } Node *p1=first->next; while(p1!=0){ fprintf(fp4,"%5d%12s%9s%9d%9d%11d%11d\n",p1->d.num,p1->d.name,p1->d.kind,p1->d.time,p1->d.mark,p1->d.term,p1->d.opterm); p1=p1->next; } } printf("修改完毕\n"); Node *k=first; while(first!=0){ first=first->next; free(k); k=first; } fclose(fp4); while(b==0){ printf("\n1-返回主菜单;2-退出系统\n"); scanf("%d",&a); if(a==1||a==2) b=1; else printf("\n输入错误,请重新输入!!!\n"); } if(a==1) return main(); else exit(0); } /*课程删除*/ void delet() { int a=0,b=0; int h; FILE *fp; printf("请输入需要删除的课程编号\n"); scanf("%d",&h); if((fp=fopen("course.txt","r"))==NULL) { printf("\nCannot open course!\n"); exit(0); } Node *first=(Node *)malloc(sizeof(Node)); /*头指针初始化*/ first->next=0; /*工作指针指向头结点*/ for(;!feof(fp);) { Node *s=(Node*)malloc(sizeof(Node)); fscanf(fp,"%d%s%s%d%d%d%d",&s->d.num,s->d.name,s->d.kind,&s->d.time,&s->d.mark,&s->d.term,&s->d.opterm); s->next=first->next; first->next=s; } Node *p1=first;Node *p2=first;Node *p3=first; int count=0,dele=0,obey=0; printf("请输入需要删除的课程编号\n"); scanf("%d",&dele); for(;p1->next==0;) { if(p1->d.num==dele) { count++; printf("课程编号 课程名称 课程性质 总学时 学分 考试课1或考察课2 开课学期:\n"); printf("%5d%12s%9s%9d%9d%11d%11d\n",p1->d.num,p1->d.name,p1->d.kind,p1->d.time,p1->d.mark,p1->d.term,p1->d.opterm); printf("请确认是否删除???1-是,2-否\n"); scanf("%d",&obey); if(obey==1) { p2->next=p1->next; free(p1); printf("删除成功!!!!\n"); } else; } else; p2=p1; p1=p1->next; } while(p1!=0){ fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d\n",p3->d.num,p3->d.name,p3->d.kind,p3->d.time,p3->d.mark,p3->d.term,p3->d.opterm); p3=p3->next; } while(b==0){ printf("\n1-返回主菜单;2-退出系统\n"); scanf("%d",&a); if(a==1||a==2) b=1; else printf("\n输入错误,请重新输入!!!\n"); } if(a==1) return main(); else exit(0); } /*统计选课情况*/ void statistics() { int a; FILE *fp; if((fp=fopen("course.txt","r"))==NULL) { printf("\nCannot open course!\n"); exit(0); } Node *first=(Node *)malloc(sizeof(Node)); /*头指针初始化*/ first->next=0; for(;!feof(fp);) { Node *s=(Node*)malloc(sizeof(Node)); fscanf(fp,"%d%s%s%d%d%d%d",&s->d.num,s->d.name,s->d.kind,&s->d.time,&s->d.mark,&s->d.term,&s->d.opterm); s->next=first->next; first->next=s; } Node *e=first->next; int count1,count2,count3,count4; for(;e==0;) { if(e->d.opterm==1) count1++; else if(e->d.opterm==2) count2++; else if(e->d.opterm==3) count3++; else if(e->d.opterm==4) count4++; else printf("课程编号 课程名称 课程性质 总学时 学分 考试课1或考察课2 开课学期:\n"); printf("%5d%12s%9s%9d%9d%11d%11d\n",e->d.num,e->d.name,e->d.kind,e->d.time,e->d.mark,e->d.term,e->d.opterm); e=e->next; } printf("开课学期为1的有%d门,开课学期为2的有%d门,开课学期为3的有%d门,开课学期为4的有%d门\n",count1,count2,count3,count4); Node *k=first; while(first!=0){ first=first->next; free(k); k=first; } fclose(fp); printf("\n1-返回主菜单;2-退出选课系统\n"); scanf("%d",&a); if(a==1) return main(); else exit(0); } /*主菜单*/ void main() { int n,w; 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(" 0-退出\n"); printf("*********************************************************************************\n"); printf(" 请输入选项前的数字\n"); scanf("%d",&n); do { if(n>5||n<0) { printf("\n输入错误\n"); scanf("%d",&n); } else w=1; }while(w==0); switch(n) { case 1:insert();break; case 2:browser();break; case 3:search();break; case 4:revise();break; case 5:statistics();break; case 6:delet();break; case 0:exit(0); } } ```
刚学数据结构写了个链表,调试无报错,一运行就显示“main.exe停止运行”。
刚学数据结构,写了个链表,调试无误,一运行就显示“main.exe停止运行”,很头疼,求大神指点。。谢谢~ 代码如下: #include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR 0 #define OVERFLOW -1 # define LIST_INIT_SIZE 100 // 线性表存储空间的初始分配量 # define LISTINCREMENT 10 // 线性表存储空间的分配增量 typedef int Status; typedef int ElemType; //定义ElemType类型为int typedef struct LNode { ElemType data; //数据域 struct LNode *next; //指针域 } LNode,*LinkList; //LinkList为Lnode类型的指针 Status InitList(LinkList L) { L=NULL; L=(LinkList)malloc(sizeof(LNode)); if(!L) exit(OVERFLOW); L->next=NULL; return OK; } void CreateList(LinkList L,int n) { //正位序输入n个元素的值,建立带表头结点的单链表L LinkList r=NULL,p=NULL; p = (LinkList)malloc(sizeof(LNode)); int i; L->next=NULL; r=L; for(i=0; i<n; ++i) { p = (LinkList)malloc(sizeof(LNode)); p->next=NULL; r->next=p; //插入到表尾 r=p; //r指向新的尾结点 scanf("%d",&p->data);//输入元素值 } }//CreateList_L int ListEmpty(LinkList L) { //若L为空表,则返回1,否则返回0 if(L->next) //非空 return 0; else return 1; } Status GetElem(LinkList L,int i,ElemType e) { //当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR LinkList p; int j; p=L->next; j=1; //初始化 while(p&&j<i) { //向后扫描,直到p指向第i个元素或p为空 p=p->next; ++j; } if(!p || j>i) return ERROR; //第i个元素不存在 e=p->data; //取第i个元素 return OK; }//GetElem_L Status LocateElem(LinkList L,ElemType e) { LinkList p; p=L->next; while(p && p->data!=e) p=p->next; return p; //返回L中值为e的数据元素的位置,查找失败返回NULL } Status ListInsert(LinkList L,int i,ElemType e) { LinkList p; LNode *s; int j; p=L; j=0; while(p&&j<i-1) { p=p->next; //寻找第i-1个结点 ++j; } if(!p||j>i-1)return ERROR; //i大于表长?+?1或者小于1 s=(LinkList)malloc(sizeof(LNode));//生成新结点s s->data=e; //将结点s的数据域置为e s->next=p->next; //将结点s插入L中 p->next=s; return OK; }//ListInsert_L Status ListDelete(LinkList L,int i,ElemType e) { LinkList p; int j; LNode *r; p=L; j=0; while(p->next &&j<i-1) //寻找第i个结点,并令p指向其前驱 { p=p->next; ++j; } if(!(p->next)||j>i-1) return ERROR; //删除位置不合理 r=p->next; //临时保存被删结点的地址以备释放 p->next=r->next; //改变删除结点前驱结点的指针域 e=r->data; free(r);//释放结点 }//ListDelete_L void menu() { printf("/////////////////////////\n"); printf("输出单链表中的各元素值 1\n"); printf("在单链表中插入数据元素 2\n"); printf("在单链表中删除数据元素 3\n"); printf("取出单链表中的数据元素 4\n"); printf(" 结束程序 0\n"); printf("/////////////////////////\n"); } int main() { int n,m,i,e; LinkList L = NULL,p = NULL; InitList(L); printf("请输入元素个数:"); scanf("%d",&n); printf("依次输入%d个数据元素:",n); CreateList(L,n); do { printf("\n \n"); menu(); printf("请输入你的选择:"); scanf("%d",&m); switch(m) { case 1: printf("现在链表的元素为:"); p = L->next; while(p!=NULL) { printf("%d ",p->data); p = p->next; } printf("\n"); break; case 2: printf("依次输入插入位置和数据元素(空格隔开):"); scanf("%d %d",&i,&e); ListInsert(L,i,e); break; case 3: printf("输入需要删除的元素的位置:"); scanf("%d",&i); ListDelete(L,i,e); break; case 4: printf("输入需要取出的元素的位置:"); scanf("%d",&i); GetElem(L,i,e); break; case 0: printf("已结束程序!!!\n"); break; default: printf("输入错误!!!\n"); } } while(m!=0); }
求教大佬们,这个“读取位置 0xCCCCCCCC 时发生访问冲突。”的异常该如何解决?
程序是数据结构的图的存储和遍历实验,功能是输入一个无向图并将其转换成邻接矩阵,然后把邻接矩阵变成邻接表,最后深度优先遍历该邻接表生成树(VS2017): ``` #include <stdio.h> #include <malloc.h> #include <stdlib.h> #include <string.h> #include<iostream> using namespace std; typedef int InfoType; #define MAXV 100 //最大顶点个数 #define INF 32767 //INF表示∞ #define isLetter(a) ((((a)>='a')&&((a)<='z')) || (((a)>='A')&&((a)<='Z'))) #define LENGTH(a) (sizeof(a)/sizeof(a[0])) //以下定义邻接矩阵类型 typedef struct { int no; //顶点编号 InfoType info; //顶点其他信息 } VertexType; //顶点类型 typedef struct //图的定义 { char vexnum[MAXV]; int edges[MAXV][MAXV]; //邻接矩阵 int n, e; //顶点数,边数 VertexType vexs[MAXV]; //存放顶点信息 } MGraph, *PGragh; //图的邻接矩阵类型 //以下定义邻接表类型 typedef struct ANode //边的节点结构类型 { int adjvex; //该边的终点位置 struct ANode *nextarc = NULL; //指向下一条边的指针 InfoType *info; //该边的相关信息,这里用于存放权值 } ArcNode; typedef int Vertex; typedef struct Vnode //邻接表头节点的类型 { Vertex data; //顶点信息 ArcNode *firstarc; //指向第一条边 } VNode; typedef VNode AdjList[MAXV]; //AdjList是邻接表类型 typedef struct { AdjList adjlist; //邻接表 int n, e; //图中顶点数n和边数e } ALGraph; //图的邻接表类型 void MatToList(MGraph *g, ALGraph *G) //将邻接矩阵g转换成邻接表G { int i, j; ArcNode *p; //G = (ALGraph *)malloc(sizeof(ALGraph)); for (i = 0; i<g->n; i++) //给邻接表中所有头节点的指针域置初值 G->adjlist[i].firstarc = NULL; for (i = 0; i<g->n; i++) //检查邻接矩阵中每个元素 for (j = g->n - 1; j >= 0; j--) if (g->edges[i][j] != 0) //存在一条边 { p = (ArcNode *)malloc(sizeof(ArcNode)); //创建一个节点*p p->adjvex = j; p->nextarc = G->adjlist[i].firstarc; //采用头插法插入*p G->adjlist[i].firstarc = p; } G->n = g->n; G->e = g->e; //return G; } void DispMat(MGraph *g) //输出邻接矩阵g { int i, j; for (i = 0; i<g->n; i++) { for (j = 0; j<g->n; j++) printf("%3d", g->edges[i][j]); printf("\n"); } } void DispAdj(ALGraph G) //输出邻接表G { int i; ArcNode *p; for (i = 0; i<G.n; i++) { p = G.adjlist[i].firstarc; printf("%3d: ",i); //cout << i << ":"; while (p != NULL) { //printf("%3d",p->adjvex); cout << p->adjvex << " "; p = p->nextarc; } printf("\n"); } } static int get_position(MGraph g, char ch) { int i; for (i = 0; i<g.n; i++) if (g.vexnum[i] == ch) return i; return -1; } //读取一个输入字符 static char read_char() { char ch; do { ch = getchar(); } while (!isLetter(ch)); return ch; } // 创建无向图 MGraph* create_graph() { char c1, c2; int vex, edge; int i, p1, p2; MGraph* pG; // 输入顶点数和边数 printf("输入顶点数和边数:"); scanf_s("%d%d", &vex, &edge); if (vex < 1 || edge < 1 || (edge >(vex * (vex - 1)))) { printf("input error: invalid parameters!\n"); return NULL; } if ((pG = (MGraph*)malloc(sizeof(MGraph))) == NULL) return NULL; memset(pG, 0, sizeof(MGraph)); // 初始化顶点数和边数 pG->n = vex; pG->e = edge; // 初始化"顶点" printf("输入各顶点名称:\n"); for (i = 0; i < pG->n; i++) { printf("vertex(%d): ", i); pG->vexnum[i] = read_char(); } // 初始化"边" for (i = 0; i < pG->e; i++) { // 读取边的起始顶点和结束顶点 printf("edge(%d):", i); c1 = read_char(); c2 = read_char(); p1 = get_position(*pG, c1); p2 = get_position(*pG, c2); if (p1 == -1 || p2 == -1) { printf("input error: invalid edge!\n"); free(pG); return NULL; } pG->edges[p1][p2] = 1; pG->edges[p2][p1] = 1; } return pG; } // 打印矩阵队列图 void print_graph(MGraph G) { int i, j; printf("Martix Graph:\n"); for (i = 0; i < G.n; i++) { for (j = 0; j < G.n; j++) printf("%d ", G.edges[i][j]); printf("\n"); } } //创建一个树的左子女,右兄弟结构 typedef struct node { int data; node *firstChild = NULL; node *nextSibling = NULL; }TreeNode, *BinTree; int visited[MAXV]; void Dfs(ALGraph G, int i, BinTree &T) { visited[i] = 1; bool first = true;//表示是否为当前节点第一个孩子 TreeNode *locat = new TreeNode;//同样是定位作用 while (G.adjlist[i].firstarc != NULL)//从此节点出发,访问邻接节点。 { if (visited[G.adjlist[i].firstarc->adjvex] == 0) { visited[G.adjlist[i].firstarc->adjvex] = 1; TreeNode *t = new TreeNode;//建立一颗小树 t->data = G.adjlist[i].firstarc->adjvex; if (first)//是当前节点第一个孩子 { T->nextSibling = t;//建立右孩子 first = false;//表示不是传进来的第一个孩子,则是孩子们的兄弟 } else { locat->nextSibling = t; } locat = t; Dfs(G, G.adjlist[i].firstarc->adjvex, t);//继续对小树找兄弟 } G.adjlist[i].firstarc = G.adjlist[i].firstarc->nextarc; } } void DFS_Traverse(ALGraph G, BinTree &T) { TreeNode *locat = new TreeNode;//此处定义一个定位指针,用来定位当前树的位置 for (int i = 1; i <= G.n; i++) { visited[i] = 0; } for (int i = 1; i <= G.n; i++) { if (visited[i] == 0) { TreeNode *t = new TreeNode;//这代表一个小树 t->data = G.adjlist[i].data; if (T == NULL) { T = t;//若树为空,建立头节点 } else { locat->nextSibling = t;//若树不空,则是森林,插入右兄弟 } locat = t;//定位至小树 Dfs(G, i, locat);//建立小树 } } } //建立图深度优先搜索森林 void DFSForest(ALGraph G, BinTree &T) { DFS_Traverse(G, T); } void Display(BinTree T) { if (T) { cout << T->data << ' '; Display(T->firstChild); Display(T->nextSibling); } } //以下主函数用作调试 int main() { //int i, j; MGraph* g, g1; ALGraph G; BinTree T; g = create_graph(); printf("\n"); printf(" 无向图G的邻接矩阵:\n"); DispMat(g); //G = (ALGraph *)malloc(sizeof(ALGraph)); //M = (ALGraph *)malloc(sizeof(ALGraph)); printf(" 图G的邻接矩阵转换成邻接表,顶点名称用编号表示:\n"); MatToList(g, &G); DispAdj(G); DFSForest(G, T); Display(T); system("pause"); } ``` 运行程序,输入顶点和边的信息,能够输出邻接矩阵和邻接表,但到了生成森林那一步就报异常: ![图片说明](https://img-ask.csdn.net/upload/201912/02/1575292200_474721.png)![图片说明](https://img-ask.csdn.net/upload/201912/02/1575292211_609361.png) 和同学研究了一下发现问题可能是出在执行到函数 ``` void DFS_Traverse(ALGraph G, BinTree &T) { TreeNode *locat = new TreeNode;//此处定义一个定位指针,用来定位当前树的位置 for (int i = 1; i <= G.n; i++) { visited[i] = 0; } for (int i = 1; i <= G.n; i++) { if (visited[i] == 0) { TreeNode *t = new TreeNode;//这代表一个小树 t->data = G.adjlist[i].data; if (T == NULL) { T = t;//若树为空,建立头节点 } else { locat->nextSibling = t;//若树不空,则是森林,插入右兄弟 } locat = t;//定位至小树 Dfs(G, i, locat);//建立小树 } } } ``` 的最后一个for中的Dfs(G,i,locat);这一句时出了问题,若在该处设置断点再重新运行程序并输入测试数据:![图片说明](https://img-ask.csdn.net/upload/201912/02/1575292585_791337.png) 然后按F11逐行运行,就跳到了函数Dfs()那里: ![图片说明](https://img-ask.csdn.net/upload/201912/02/1575292683_31577.png) ![图片说明](https://img-ask.csdn.net/upload/201912/02/1575292709_126937.png) ![图片说明](https://img-ask.csdn.net/upload/201912/02/1575292848_579112.png) 这时候按“继续”继续运行,到第二次循环时异常就出现了,请教大佬我应该如何修改这个程序,谢谢
运行之后为何显示打开文件错误
#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(); }
求助CB 大佬快来!一个小问题
如题 为什么我编程的代码无返回值;就是一般return 0; ``` #include<bits/stdc++.h>//万能头文件 包含C++所有头文件 using namespace std; int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31}; int main() { cout<<"Please input such as 2019/9/9 "<<endl; cout<<"此程序计算该日期为当年第多少天"<<endl; int a,b,c; while(~scanf("%d/%d/%d",&a,&b,&c)) { if(a%4==0&&a%100!=0||a%400==0) { mon[2]=29; } else { mon[2]=28; } int sum=0; for(int i=1;i<b;i++) { sum+=mon[i]; } sum+=c; cout<<"此日期为"<<a<<"年第"<<sum<<"天"<<endl; } return 0; } ``` 之后程序下面都会有一列显示程序运行时间以及返回0的数据 我这个程序编译后 输入2019/10/16后输出答案后 仍然要求继续输入 并没有结束 请问这是为什么?谢谢![图片说明](https://img-ask.csdn.net/upload/201910/18/1571407932_160995.png)
primer5th第八章IO的第一个习题,程序运行错误
#include<string> #include<iostream> #include<stdexcept> using namespace std; istream& f(istream& in) { int val; while (in >> val, !in.eof()) {//遇到文件结束符停止 if (in.bad()) throw runtime_error("IO流错误"); if (in.fail()) { throw runtime_error("输入数据错误,请重试"); in.clear(); in.ignore(100, '\n'); continue; } cout << val << endl; } in.clear(); return in; } int main() { cout << "请输入整数以ctrl+Z结束" << endl; f(cin); return 0; } 下面是书本后面程序的运行时候的答案: 123 1 2 3 7.6 7 数据错误,请重试 a 数据错误请重试 4 ^Z 但是我运行的时候是下面这样的![图片说明](https://img-ask.csdn.net/upload/201612/26/1482733846_101533.png)
使用phtread多线程编程程序来生成Fibonacci序列 c/c++
请用c/c++实现以下内容:(多线程) Fibonacci序列是一组:0,1,1,2,3,5,8,…… fib0=0; fib1=1; fibn=fibn-1+fibn-2; 使用phtread多线程编程程序来生成Fibonacci序列。程序应该这样工作:用户运行程序时,在命令行输入要产生Fibonaci序列数,然后程序创建一个新的线程来产生Fibonacci数,把这个序列放到线程共享的数据中(数组可能是一种最方便的数据结构)。当线程执行完成后,父线程将输出子线程产生的序列。由于在子线程结束前,父线程不能开始输出Fibonacci序列,因此,父线程需要等子线程结束。
点击运行的是没有报错,输入的时候程序死了
> ![图片说明](https://img-ask.csdn.net/upload/201904/21/1555850592_411819.png) ``` #include<stdio.h> #include<stdlib.h> typedef struct stacknode/ { int data; struct stacknode *next; }stacknode,*linkstack; linkstack InitStack(linkstack s);//初始化 int empty(linkstack s); int Push(linkstack s,int e);//入栈 int Pop(linkstack s);//出栈 int gettop(linkstack s);//取栈顶元素 void print(linkstack s);//打印栈 int destroyStack(linkstack s); int main() int main() { linkstack s; int choice,data,e; s=(linkstack )malloc(sizeof(linkstack)); s=InitStack(s); while(1) { printf("请输入相应数字,选择操作:\n"); printf("1.入栈 2.出栈 3.打印 4.取栈顶元素 5.结束\n"); scanf("%d",&choice); if(choice!=1&&choice!=2&&choice!=3&&choice!=4&&choice!=5) { printf("非法选择!请重新选择:\n"); scanf("%d",&choice); } if(choice==1) { printf("请输入一个要入栈的数据:"); scanf("%d",&data); e=data; Push(s,e); } if(choice==2) { if(!empty(s)) Pop(s); else printf("这是一个空栈!\n"); } if(choice==3) { if(!empty(s)) print(s); else printf("这是一个空栈!\n"); } if(choice==4) { if(!empty(s)) gettop(s); else printf("这是一个空栈!\n"); } if(choice==5) return 0; } } linkstack InitStack(linkstack s)//这里的s 是形参 { s=(linkstack )malloc(sizeof(linkstack)); if (s == NULL) printf("创建失败"); s->data = 0; s->next=NULL; return s; } int empty(linkstack s) { linkstack p; p=s->next; if(p== NULL) return 1; else return 0; } int Push(linkstack s,int e) { linkstack p; p=(linkstack )malloc(sizeof(linkstack)); p->data=e; p->next = s->next; s->next = p; printf(" %d已入栈\n",e); return 1; } int Pop(linkstack s) { linkstack p; p=(linkstack )malloc(sizeof(linkstack)); p = s->next; if (!empty(s)) { s->next = s->next->next; printf(" %d 已出栈\n",p->data); free(p); //return 1; } return 0; } int gettop(linkstack s) { linkstack p; p=s->next; if(p!=NULL) { printf("栈顶元素为:"); printf("%d \n",p->data); } return p->data; } void print(linkstack s) { linkstack p; p=s->next; printf("栈为:\n"); printf(" top of stack\n"); while(p!=NULL) { printf("%8d \n",p->data); p = p->next; } printf(" base of stack \n"); } int destroyStack(linkstack s) { while (!empty(s)) { Pop(s); } printf("栈已销毁!\n"); free(s); return 0; }
怎么把这样的文件文本按照姓名分数的形式读入链表?
程序运行起来,检测是否存在data.txt,如果存在,读取文件内容,并保存在链表中!再一一输出,输出结束问是否要更新文件,支持数据修改(如某学生分数修改成100分),支持数据添加(加入一个学生的成绩)! 如果不存在data.txt,用链表记录输入的学生名字,分数;将链表数据导入到文件中!并退出程序! 要求: 用键值对保存文件实现一个程序 保存的文件手动打开看到如: readline; name1:zhangsan score1:100 name2:lisi score2:90 name3:wangwu score3:60 ............... ...............
求助,断点he存储到txt文件时有null
第一运行时存在断点,第二,存储到txt文件时有null。第三在执行read的sh无法读取txt文件 ``` #include <stdio.h> #include< stdlib.h> #include <windows.h> int n; int Return; int menu(); void input(); void end(); #define N 30 char p1[20] = { "stud.dat" }; char p2[20] = { "studsort.dat" }; FILE *fp; struct student_type { char name[20]; char num[20]; double math, Eng, Chin, ave; } stud[N], h; void main() { int start; printf("输入学生人数(n>30)"); scanf("%d", &n); while (1) { start = menu(); break; } } int menu() { int q; int start; system("cls"); printf("=============================================\n"); printf("=============学生成绩管理系统3.0=============\n"); printf("=============================================\n\n"); 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"); printf("|(9) |\n"); printf("|(0)end |\n"); printf("|(输入括号里的数字,程序开始运行) |\n"); printf("|___________________________________________|\n"); scanf("%d",&q); switch (q) { case 1:input(); break; case 0:end(); break; } return 0; } void end() { printf("程序结束,欢迎下次使用。"); } void input() { int fclose(FILE *fp); int Z,i; int Return; COORD coord; system("cls"); printf("_____________________________________________________________________________________________\n"); printf("| number | student |student ID |科目1 |科目2 |科目3 |\n"); printf("|________|_______________|____________|_________________|_________________|_________________|\n"); for ( i = 0; i<n; i++) { FILE *fp; fp = fopen("D:\\score.txt", "w"); printf("%d\t", i + 1); /*name*/ coord.X = 10; //第3+i列 coord.Y = 3+i; //第10行 //获取控制台缓冲区句柄 HANDLE ConsoleHandleName = GetStdHandle(STD_OUTPUT_HANDLE); //设置光标位置 SetConsoleCursorPosition(ConsoleHandleName, coord); printf("name:"); scanf("%s", stud[i].name); /*ID*/ coord.X = 26; //第26列 coord.Y = 3+i; //第3+i行 //获取控制台缓冲区句柄 HANDLE ConsoleHandleID = GetStdHandle(STD_OUTPUT_HANDLE); //设置光标位置 SetConsoleCursorPosition(ConsoleHandleID, coord); printf("ID:"); scanf("%s", stud[i].num); getchar(); /*科目一math*/ coord.X = 39; //第40列 coord.Y = 3 + i; //第3+i行 //获取控制台缓冲区句柄 HANDLE ConsoleHandle1 = GetStdHandle(STD_OUTPUT_HANDLE); //设置光标位置 SetConsoleCursorPosition(ConsoleHandle1, coord); printf("科目一:"); scanf("%d", &stud[i].math); /*科目二eng*/ coord.X = 57; //第50列 coord.Y = 3 + i; //第3+i行 //获取控制台缓冲区句柄 HANDLE ConsoleHandle2 = GetStdHandle(STD_OUTPUT_HANDLE); //设置光标位置 SetConsoleCursorPosition(ConsoleHandle2, coord); printf("科目二:"); scanf("%d", &stud[i].Eng); /*科目三chin*/ coord.X = 75; //第60列 coord.Y = 3 + i; //第3+i行 //获取控制台缓冲区句柄 HANDLE ConsoleHandle3 = GetStdHandle(STD_OUTPUT_HANDLE); //设置光标位置 SetConsoleCursorPosition(ConsoleHandle3, coord); printf("科目三:"); scanf("%d", &stud[i].Chin); fprintf(fp, "学号 姓名 科目一 科目二 科目三 ave\n"); fprintf(fp, "%d%16s %d%16s %16f %d%16s %d%16s\n", stud[i].num, stud[i].name, stud[i].math, stud[i].Eng, stud[i].Chin, stud[i].ave);//math, Eng, Chin, ave } /*________ | _______________ | ____________ | _________________ | _________________ | _________________ |*/ printf("\n======================================================================================================="); printf("\n======================是否删除原数据并写入新数据,按0确定,按1取消并返回菜单栏========================="); printf("\n=======================================================================================================\n"); scanf("%d", &Z); if (Z == 1 ) { FILE *fp; fp = fopen("D:\\score.txt", "w"); fprintf(fp, "学号 姓名 科目一 科目二 科目三 ave\n"); printf("\n\n+++++++++++++++++++++++++取消存储并返回菜单栏+++++++++++++++++++++++++\n\n"); }//end if else printf("\n\n*******************恭喜,保存完成!即将返回菜单栏*******************\n\n"); printf("+++++++++++++++++++++++++5s后返回返回菜单栏+++++++++++++++++++++++++"); Sleep(5 * 1000); //sleep for 5 seconds fclose(fp);//关闭txt Return = menu(); } void read() { int Return; int fclose(FILE *fp); int Z; char name[10]; char num[20]; COORD coord; FILE *fp; system("cls"); if ((fp = fopen("score.txt", "r")) == NULL) { printf("+++++++++++++++++++++++++++Fail to open file!+++++++++++++++++++++++++++\n"); printf("++++++++++++++++++++++++++++++即将返回菜单++++++++++++++++++++++++++++++\n"); Sleep(5 * 1000); //sleep for 5 seconds Return = menu(); //返回菜单 }//end if fp = fopen("D:\\score.txt", "r");/*以读模式("r")打开文件score.txt*/ fscanf(fp, "%s", name); fscanf(fp, "%s", num);/*从文件读取*/ printf("%s\n%s", name, num); fclose(fp); /*关闭文件*/ Return = menu(); } ```
这里有一题ACM的小题目,求众神解答。帮写个程序。小弟冰天雪地裸奔哭嚎以示感谢!
邮局选址: 在一个按照东西和南北方向划分成规整街区的城市里,n 个居民点散乱的分布在不同的街区中。用X坐标表示东西向,用Y坐标表示南北向,各居民点的位置可以有坐标(XY)表示。街区中任意2点(X1,Y1)和(X2,Y2)质检的距离可以用数值丨X1-X2丨+丨Y1-Y2丨度量。居民们希望在城市中选择建立邮局的最佳位置,使n 个居民点到邮局的距离总和最小。 编程任务: 给定n 个居民点的位置,计算n个居民点到邮局的距离总和的最小值 数据输入: 由文件input.txt提供输入数据,文件的第1行是居民点数n,1<=n<=10000,接下来n行是居民点的位置,每行2个整数X和Y ,-10000<=x,y<=10000。 结果输出: 程序运行结束时,按计算结果输出文件output.txt中。文件的第一行中的数是n个居民点到邮局的距离总和的最小值。 输入文件实例 input.txt 5 1 2 2 2 1 3 3 -2 3 3 输出文件实例 output.txt 10
相见恨晚的超实用网站
搞学习 知乎:www.zhihu.com 简答题:http://www.jiandati.com/ 网易公开课:https://open.163.com/ted/ 网易云课堂:https://study.163.com/ 中国大学MOOC:www.icourse163.org 网易云课堂:study.163.com 哔哩哔哩弹幕网:www.bilibili.com 我要自学网:www.51zxw
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
字节跳动视频编解码面经
引言 本文主要是记录一下面试字节跳动的经历。 三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时
开源一个功能完整的SpringBoot项目框架
福利来了,给大家带来一个福利。 最近想了解一下有关Spring Boot的开源项目,看了很多开源的框架,大多是一些demo或者是一个未成形的项目,基本功能都不完整,尤其是用户权限和菜单方面几乎没有完整的。 想到我之前做的框架,里面通用模块有:用户模块,权限模块,菜单模块,功能模块也齐全了,每一个功能都是完整的。 打算把这个框架分享出来,供大家使用和学习。 为什么用框架? 框架可以学习整体
源码阅读(19):Java中主要的Map结构——HashMap容器(下1)
(接上文《源码阅读(18):Java中主要的Map结构——HashMap容器(中)》) 3.4.4、HashMap添加K-V键值对(红黑树方式) 上文我们介绍了在HashMap中table数组的某个索引位上,基于单向链表添加新的K-V键值对对象(HashMap.Node&lt;K, V&gt;类的实例),但是我们同时知道在某些的场景下,HashMap中table数据的某个索引位上,数据是按照红黑树
c++制作的植物大战僵尸,开源,一代二代结合游戏
    此游戏全部由本人自己制作完成。游戏大部分的素材来源于原版游戏素材,少部分搜集于网络,以及自己制作。 此游戏为同人游戏而且仅供学习交流使用,任何人未经授权,不得对本游戏进行更改、盗用等,否则后果自负。 目前有六种僵尸和六种植物,植物和僵尸的动画都是本人做的。qq:2117610943 开源代码下载 提取码:3vzm 点击下载--&gt; 11月28日 新增四种植物 统一植物画风,全部修
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成喔~) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
Python 基础(一):入门必备知识
目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级 1 标识符 标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。 以下划线开头的标识符有特殊含义,单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供
深度学习图像算法在内容安全领域的应用
互联网给人们生活带来便利的同时也隐含了大量不良信息,防范互联网平台有害内容传播引起了多方面的高度关注。本次演讲从技术层面分享网易易盾在内容安全领域的算法实践经验,包括深度学习图
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
Python 编程实用技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法,并会持续更新。
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
"狗屁不通文章生成器"登顶GitHub热榜,分分钟写出万字形式主义大作
GitHub 被誉为全球最大的同性交友网站,……,陪伴我们已经走过 10+ 年时间,它托管了大量的软件代码,同时也承载了程序员无尽的欢乐。 万字申请,废话报告,魔幻形式主义大作怎么写?兄dei,狗屁不通文章生成器了解一下。这个富有灵魂的项目名吸引了众人的目光。项目仅仅诞生一周,便冲上了GitHub趋势榜榜首(Js中文网 -前端进阶资源教程)、是榜首哦
推荐几款比较实用的工具,网站
1.盘百度PanDownload 这个云盘工具是免费的,可以进行资源搜索,提速(偶尔会抽风????) 不要去某站买付费的???? PanDownload下载地址 2.BeJSON 这是一款拥有各种在线工具的网站,推荐它的主要原因是网站简洁,功能齐全,广告相比其他广告好太多了 bejson网站 3.二维码美化 这个网站的二维码美化很好看,网站界面也很...
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
相关热词 c# plc s1200 c#里氏转换原则 c# 主界面 c# do loop c#存为组套 模板 c# 停掉协程 c# rgb 读取图片 c# 图片颜色调整 最快 c#多张图片上传 c#密封类与密封方法
立即提问

相似问题

1
数据结构与算法那:程序运行时间的问题
2
用C语言写的程序,目标是输入一个字母,输出这个字母其后的第四个,下面程序有点问题,求帮看看。
3
汇编程序判断输入字符
2
R做判别分析,多分类问题的距离判别,同样的程序换个数据就运行不了?
1
WINDOWS上我在运行一个jar程序,用的bat运行的,现在我要定时关闭、定时重启这个程序
5
做了一个android的登陆程序运行到ActivityManager:就结束了
2
当没有窗体运行时,结束程序调试怎样用代码实现
2
简单的矩阵转置,不知道为什么运行到scanf输入数据就出错,请问为什么?
3
C语言。从键盘上输入一些整数,求所有正数之和,当输入0或负数时,程序结束。
3
我的程序在华为 OPPO上运行正常,为什么在三星上程序停止运行,求大神解在线等
3
C++ 通过char一个数组,用cin.get输入后程序直接结束
3
c++程序在输入倒计时的时间内,输入数据的问题。
3
mfc程序数据库访问问题
1
在cmd.exe中运行一个程序,程序打印信息后,如何显示C:\user\XXX
2
VB6,使程序依据运行后输入的数据进行计算并输出结果。
7
android 中为什么单击按钮后会结束程序
4
黑马作业题,实现一个验证程序运行次数的小程序java
9
程序运行真的分电脑吗?
3
android studio 按运行程序后出现这个界面什么意思
1
请问在windows程序的快捷方式里添加什么参数,可以使程序隐藏启动运行。