笔记本电脑很久没用,现在开机后很久才进入桌面卡死了,怎么办

10:33 提问
C语言怎样编写程序运行完后,不自动结束,而是返回程序的开始的主菜单?
我的程序运行完一个功能后按任意键就退出了,而不是返回主菜单
代码如下,应该怎么改?(具体一点,菜鸟一个)多谢!
#define LENTEL sizeof(tel)
#define ID struct tel
struct tel
char name[15];
char tele[11];
char style[15];
char mail[20];
ID *id = NULL;
/*读取telephone.txt文件中的内容创建学生链表*/
ID* create()
ID *p1,*p2;
p2 = (ID)malloc(LENTEL);
head = p2;
if((fp = fopen("telephone.txt","r")) == NULL)
printf("联系人文件打开错误,请将telephone.txt放置与程序同一目录下!\n");
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;
fclose(fp);
ID* findbyname(char name[])
ID* temp = NULL;
while (p!=NULL)
if(strcmp(name,p-&name) == 0)
ID* findbytele(char tele[])
ID* temp = NULL;
while (p!=NULL)
if(strcmp(tele,p-&tele) == 0)
/*判断这个联系人是否存在*/
bool Istel(char name[])
ID *p = id-&
bool flag =
while (p != NULL)
if(strcmp(p-&name,name) == 0)
ID *newtel = NULL;
char tel_name[15];
char tel_tele[11];
char tel_style[15];
char tel_mail[20];
printf("\n------- 请输入学生基本信息 --------\n");
printf("姓名
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-& p-&next!=NULL; p=p-&next);
printf("\n联系人已添加成功!\n");
printf("\n该联系人姓名已存在!\n");
void Print_Inquire_All()
void menu_print_out();
ID *p1 = id-&
menu_print_out();
while (p1!=NULL)
printf("%s\t%s\t%s\t%s\n",p1-&name,p1-&tele,p1-&style,p1-&mail);
system("pause");
void menu_print_out()
printf("\n---------------------------------\n");
printf("\n---------------------------------\n");
/*主菜单*/
void menu(void)
void ReadBack();
╭════════╮
printf("╭══════╣通讯管理系统V1.0╠══════╮\n");
printf("║
╰════════╯
printf("║
【1】添加数据
【3】退出系统
printf("║
printf("║
【2】查询数据
*************
printf("║
printf("╰══════════════════════╯\n");
printf("◎请输入功能前的序号进入相应的工具:【
int a = 0;
a = getchar();
while(a!='1'&&a!='2'&&a!='3')
printf("error! please input the right number!\n");
putchar('\a');
getchar();
printf("◎请重新输入功能前的序号进入相应的工具:【
a = getchar();
Print_Inquire_All();
ReadBack();
getchar();
/*退出程序时将数据写回telephone.txt进行更新*/
void ReadBack()
FILE *TEL = fopen("telephone.txt","w");
ID *te = id-&
while (te != NULL)
fwrite((char*)&id,sizeof(ID),1,TEL);
fclose(TEL);
void Lunch()
id = create();
void main()
SetConsoleTitle("C语言通讯录管理系统");
按赞数排序
用一个while循环 把主菜单放到循环中 并进行字符判断例如 回车继续循环主菜单 输入exit则退出 最好加一个清屏函数
程序最外层加一个do -while循环。
其他相似问题c语言程序缺少头文件为什么还可以运行,并得到正确结果? 道简单的C语言程序为什么不能运行得_微博生活网
你目前正在浏览:& > &
c语言程序缺少头文件为什么还可以运行,并得到正确结果?
c语言程序缺少头文件为什么还可以运行,并得到正确结果?
&n);i &).h&gt.h&}以上程序对一个数组进行计数排序;,数组中的元素为0或者1;=0;
for (i = 0 ;i& int A[100]:&; int B[100];n&;
C[A[i]]--; printf(&=1?该程序没有任何头文件为什么能运行;
return 0; int C[2],调用rand()函数不是需要#include&lt.h&;
}for(i=n-1;输入一个整数n且n&i--) {
B[C[A[i]]-1]=A[i];100;););i&;i++) {
C[i]=C[i]+C[i-1];\
for(i=0; scanf(&\n&quot,0;吗;n;%d&i&lt?输出不是需要#include&lt,B[i]); for ( i = 0 ;i ++) A[i]=rand()%2;i &lt。为什么;i&i ++)
printf(&i++) {
printf(&%3d&%3d&quot,A[i]);
memset(C;n,sizeof(C));i++) {
C[A[i]]++;
for(i=0.该程序在VC下运行结果正确,调用memset函数不是需要#include&ltint main(){ int n
C++对函数申明不做强制要求。但你这个程序,会给你一个默认申明,和申明关系不大你用的应该是C++的编译器,连接器也能找到正确的函数进行连接。编译过了之后,直接使用的话,如果函数没有申明,提示部分函数没有申明,连接器是根据函数名称进行连接,应该会生成一些warning,所以
是默认包含的吧.,也可以在软件中把一个文件夹下的所有头文件都包含进来,就是头文件,可以在函数中包含,在VC软件中这些头文件.
很明显不可以运行,这就是证据
VC并不是标准C,他编译的时候可能默认包括以上头文件。
c语言程序缺少头文件为什么还可以运行,并得到正确结果? ……
你用的应该是C++的编译器,C++对函数申明不做强制要求,如果函数没有申明,直接使用的话,会给你一个...为什么这个头文件执行不成功!!! C语言 ……
#include&...& 是包含编译器所带的头文件,或者是PATH的环境变量中能找到...2012...c语言编程,怎么避免程序运行完还没看到结果就闪一下直接退出运行的程序?前提程序是正确的。 ……
你想在哪里停就在该语句后加system(&PAUSE&);这样能跟踪程序的运行状态C语言代码的头文件与源文件有什么区别? ……
头文件和源文件在本质上没有任何区别。只不过一般:后缀为.h的文件是头文件,内含函数声明、宏定义、结构...编写C语言程序时,没有任何错误,但运行结果显示C1.exe找不到,是怎么回事? ……
是CL.exe文件找不到吧 。你使用的是VC6?是不是下载的绿色版本啊? 1)清注册表,把所有VC6...关于c语言头文件编译和运行的问题 ……
静态变量跟全局变量都存放在静态存储区,在程序编译的时候就进行初始化,所以f()可以直接调用a。 主函...C语言源程序到运行程序经过哪几个步骤 ……
4.运行:执行.EXE文件,得到运行结果 本回答由...C语言经过编译成汇编程序 ,编译得到的汇编语...怎么用VS2012写C语言程序运行结果弹出后那个运行结果的黑框就消失了 ……
在程序的最后加上一行:getch(); 就可以了,不过需要添加头文件&conio.h& 例如: //...为什么C语言程序运行输入后没有输出 ……
1、原因可能是输入格式不对,要输入“浮点数”并用 “逗号” 分隔输入三个数两个逗号后还要额外多加一回...如何把一个复杂的C语言源代码分成几个文件,然后在dev c++上进行多文件编译? ……
程序能运行出结果了。 需要注意的一点:文件要在...否则编译器将找不到头文件,会报错,会出现: /....
你可能感兴趣的内容?用C语言写的程序,运行结束看不到运行结果,怎样让它停留在运行画面?_笑说网
用C语言写的程序,运行结束看不到运行结果,怎样让它停留在运行画面?
用C语言写的程序,运行结束看不到运行结果,怎样让它停留在运行画面?
getch();或者点击运行而不是调试
在菜梗浮盾簧墉毫堕桐乏昆单栏,RUN后面有一个C开头的菜单是什么我忘了,里面有一个USER SCREEN的命令,可以看到运行接过的界面.c语言 源代码到可执行程序的过程
从源代码(.c)到可执行文件一共分为五个步骤:
1、编译预处理
2、编译阶段
3、优化阶段
4、汇编过程
5、链接程序
一、编译预处理(.i) ------&&替代&成一个没有宏定义、没有条件编译指令、没有特殊符号的输出文件 。
读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理。伪指令主要包括以下四个方面:
(1)宏定义指令。
如:#define M 9 、#define SQUARE(x) ((x)*(x)) 、#undef(取消宏定义),宏一般都是大写(以区别函数)。注意:作为字符串的常量则不被替换。
#define M 9
int main()
printf(&M=%d&,a);
//printf(&M=%d&,9);
#define SQUARE(x) ((x)*(x))
int main()
printf(&%d\n&,SQURE(a+1));
//printf(&%d\n&,((4+1)*(4+1)));
//printf(&%d\n&,
注意:参数列表的左括号必须与SQUARE紧邻、不能吝啬括号,否则会出现计算逻辑的问题。
(2)条件编译指令。
如:#ifdef,#ifndef,#else,#elif,#endif,等等。这些伪指令使得程序员可以通过定义不同的宏来决定编译程序对哪些代码进行处理(过滤作用),可避免重复复制代码。
#ifdef 标识符
& & 程序段 1
& & 程序段 2
它的功能是,如果标识符已被 #define 命令定义过则对程序段 1 进行编译;否则对程序段 2 进行编译。
(3)头文件包含指令。
如:#include &stdio.h&、#include &stdio.h&等等。#include 是将已存在文件的内容复制到当前文件中,它可以使某些定义可以供多个不同的C源程序使用,只需加上一条#include语句 ,预编译就会自己把头文件中的定义统统都加入到它所产生的输出文件中,以供编译,而不用程序员再行定义。
注意: && 和 && 的区别。 && 表示预处理到规定的路径中去获得这个文件,而 && 则表示预处理应在当前目录中查找文件名为 stdio.h 的文件,若没有找到,则按系统指定的路径信息,搜索其他目录。
(4)特殊符号。
比如一些预定义符号__FILE__(表示正在编译的文件的名字)、 __TIME__(表示编译时刻的时间字符串)、 __LINE__(表示正在编译的文件的行号)、 __DATE__(表示编译时刻的日期字符串)、 __STDC__(判断该文件是不是定义成标准 C 程序),预编译程序对于在源程序中出现的这些串将用合适的值进行替换。
printf (&file:%s\tline:%d\tdate:%s\ttime:%s\n&,__FILE__ & ,__LINE__, __DATE__,__TIME__ );
# 运算符 和 ## 预算符
a、如果我们希望在字符串中包含宏参数,那我们就可以使用&#&,它可以把语言符号转化为字符串。
#include&stdio.h&
#define SQR(x) printf(&The square of &#x& is %d.\n&,((x)*(x)))
int main()
运行结果是:The square of 8 is 64.
b、&##&就是个粘合剂,可以将前后两部分粘合起来。
#include&stdio.h&
#define XNAME(n) x ## n
int main()
XNAME(8) ;
运行结果是:x8
二、编译阶段(.s) -------& 翻译成等价的中间代码表示或汇编代码
经过预编译得到的输出文件中,将只有常量。
如:数字、字符串、变量的定义,以及C语言的关键字(main,if,else,for,while,{,},+,-,*,\)等等。
预编译程序,所要作的工作就是通过词法分析、语义分析、符号汇总和语法分析,在确认所有的指令都符合语法规则之后,将其翻译成等价的中间代码表示或汇编代码。
三、优化阶段(执行的效率的提高)。
(1)对中间代码的优化。
(2)与机器的硬件结构有关,比如:利用机器的各个硬件寄存器存放的有关变量的值,减少对于内存的访问次数等等。
四、汇编过程(.o) ------& 生成相应的目标文件 。
汇编过程对汇编器比较简单,汇编器只需将汇编代码转变成机器可以执行的指令,每一个汇编都有一条对应的机器指令,它没有复杂的语法也没有语义,也不需要指令优化,仅仅对照机器指令和汇编指令的对照表一一翻译。
目标文件中所存放的是与源程序等效的目标的机器语言代码。
目标文件由段组成。一个目标文件中至少有两个段:
代码段  主要包含的是程序的指令。该段一般是可读、可执行、不可写。
数据段  主要存放程序中的全局变量或静态的数据。一般数据段都是可读、可执行、可写 。
五、链接程序 -------& 将有关的目标文件彼此相连接 。
由汇序生成的目标文件并不能立即就被执行,其中可能还有许多没有解决的问题,比如函数调用、模块间的变量访问。
链接包括:地址和空间分配、重定位、符号决议。
重定位:假如有一个全局变量叫var,在目标文件 A 里,而目标文件 B 里边要使用var变量,我们编译目标文件 B ,由于在编译的时候编译器找不到var的地址,编译器在无法确定地址的情况下就将地址置为0,当链接器将 A 和 B 链接后,变量var的地址会确定下来,链接器将会修改地址,这地址修改的过程就称作重定位。
链接处理分为两种:
(1)静态链接,就是函数的代码将从静态链接库中被拷贝到可执行程序中(静态链接库实际上是一个目标文件的集合,其中的每个文件含有库中的一个或者一组相关函数的代码),但这样使得可执行程序体积变大。
(2)动态链接,就是需要链接的代码放到一个共享对象中,链接程序只用记录可执行程序将来需要用的代码信息,在可执行文件被执行时,动态链接库的全部内容将被映射到运行时相应进程的虚地址空间, 动态链接程序将根据可执行程序中记录的信息找到相应的函数代码。 比静态链接节约内存。
经过上述五个过程,C源程序就最终被转换成可执行文件了。

我要回帖

更多关于 开机后显示器很久才亮 的文章

 

随机推荐