C语言常见错误
C语言常见错误解析

C语言常见错误解析:1)编译错误和运行错误:1,选择编辑的文件类型不是C语言。
如:文件扩展名不是.cpp, 而是.asp等。
重做。
错误提示:解析:编辑区上方的文件名的扩展名为:.asp是网站文件, 不是正常的.cpp文件。
当然编译菜单为灰色,无法编译。
2,做完一个程序后,没有关闭工作区,继续做下一个程序,编译系统无法确定编译多个主函数中的哪一个。
关闭工作区后,重做(这时,可使用复制粘贴方法)。
错误提示:解析:左边看出,有两个main()函数,原来的是t.cpp(工程名也是t), 现在的是li.cpp,可以编译,但不能运行。
每次运行的都是原来的程序t.exe.同时,可以看到,编译的主文件名li.cpp,与构件的文件名t.exe不相同。
3,编译系统本身故障。
编译菜单呈灰色,无法编译,按下ctl+alt+del三个键,在任务工作区,强制关闭VC,重新启动。
错误提示:略改正方法:按照正确的流程创建C语言源程序文件。
2)宏定义错误:引发语法错误错误原因:1,位置错误,宏定义错误放入函数内部;应在所有函数的前面。
错误提示:解析:遇到define,标志符出现错误,没有定义。
与函数体的语句定义格式不符。
2,缺少宏定义标志符“#”;错误提示:define pi 3.1415927解析:引起三个错误。
3,宏定义后面多加了分号“;”,误认为是语句;错误提示:语句,定义#define pi 3.1415927; 使用宏定义area=2*pi*banjing*banjing;解析:非法间接使用。
4,宏定义中库函数名错误:如sdtil.h, maths.h等错误提示:解析:不能打开stido.h文件,单引号中标志符’stido.h’错误。
5,宏定义中库函数引用标志错误:应使用一对尖括号或一对双引号<>或”“,不用函数标志圆括号( )错误提示:解析:#include中单引号中左圆括号‘(’使用错误,两函数没有定义。
C语言编程最常见的15个错误

C语言编程最常见的15个错误C语言是一种结构化语言。
它层次清晰,便于按模块化方式组织程序,易于调试和维护。
以下是关于C语言编程最常见的15个错误,希望大家认真阅读!1.书写标识符时,忽略了大小写字母的区别。
main(){ int a=5;printf("%d",A); }编译程序把a和A认为是两个不同的变量名,而显示出错信息。
C认为大写字母和小写字母是两个不同的字符。
习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。
2.忽略了变量的类型,进行了不合法的运算。
main(){ float a,b;printf("%d",a%b); }%是求余运算,得到a/b的整余数。
整型变量a和b可以进行求余运算,而实型变量则不允许进行“求余”运算。
3.将字符常量与字符串常量混淆。
char c;c="a";在这里就混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列。
C规定以“\”作字符串结束标志,它是由系统自动加上的,所以字符串“a”实际上包含两个字符:‘a'和‘\',而把它赋给一个字符变量是不行的。
4.忽略了“=”与“==”的区别。
在许多高级语言中,用“=”符号作为关系运算符“等于”。
如在BASIC 程序中可以写if (a=3) then …但C语言中,“=”是赋值运算符,“==”是关系运算符。
如:if (a==3) a=b;前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。
由于习惯问题,初学者往往会犯这样的错误。
5.忘记加分号。
分号是C语句中不可缺少的一部分,语句末尾必须有分号。
a=1b=2编译时,编译程序在“a=1”后面没发现分号,就把下一行“b=2”也作为上一行语句的一部分,这就会出现语法错误。
改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。
C语言常见错误分析

C语言常见错误分析C语言是一门非常强大和灵活的编程语言。
然而,由于人为的错误或者语法错误,程序在编译或者运行的过程中常常会出现错误。
下面是常见的C语言错误以及它们的分析。
1.语法错误:语法错误是最常见的错误类型,也是最容易修复的错误。
它们包括缺少分号、括号不匹配、使用未定义的变量等。
这些错误通常会导致编译器的语法错误提示。
2.类型错误:类型错误是由于变量类型不匹配或者操作符错误而引起的。
例如,使用一个整数变量来存储浮点数值,或者将一个指针赋值给一个非指针类型的变量。
这些错误可能导致错误的计算结果或者报错。
3.逻辑错误:逻辑错误是程序的逻辑结构有误,导致程序无法正确执行。
这种错误通常不能通过编译器检测出来,而需要开发人员通过调试来找到并修复。
例如,程序的循环条件错误导致无限循环,或者条件判断错误导致程序走入错误的分支。
4.数组越界错误:数组越界错误是指访问数组时超出了数组的有效范围。
这种错误通常导致程序崩溃或者产生不可预测的结果。
例如,访问数组元素时使用了一个超过数组长度的下标。
为了避免这种错误,开发人员应该始终确保数组下标在有效范围内。
5.空指针错误:空指针错误是指使用了一个未初始化或者已经释放的指针。
这种错误通常导致程序崩溃或者产生不可预测的结果。
为了避免空指针错误,开发人员应该在使用指针之前初始化,并且在使用完毕后及时释放。
6.内存泄漏:内存泄漏是指程序在分配内存之后没有释放,导致系统中的可用内存越来越少。
如果内存泄漏严重,最终可能会导致程序崩溃或者系统变慢。
为了避免内存泄漏,开发人员应该始终确保在不再需要内存时及时释放。
7.死循环:死循环是指程序中的循环条件永远为真,导致程序陷入无限循环。
这种情况可能导致程序无法继续执行后续代码或者崩溃。
为了避免死循环,开发人员应该在循环中始终更新循环条件。
8.未处理的异常:异常是程序运行过程中可能发生的错误,它可能导致程序崩溃或者产生不可预测的结果。
为了避免未处理的异常,开发人员应该使用异常处理机制来捕获和处理异常。
C语言程序设计中的常见错误和解决

C语言程序设计中的常见错误和解决在C语言程序设计中,很多初学者经常会遇到一些常见的错误。
这些错误可能是语法错误、逻辑错误或者是其他一些常见问题导致的。
本文将介绍一些经常出现的C语言程序设计错误,并提供相应的解决方法,帮助读者更好地理解和掌握C语言编程。
一、语法错误1. 括号未匹配括号未匹配是C语言中常见的语法错误之一。
在编写代码时,经常会使用到括号,如if语句、for循环等。
如果不小心忘记关闭某个括号,就会导致括号未匹配的错误。
解决方法:仔细检查代码中的括号是否匹配,并确保每个左括号都有相应的右括号。
2. 分号丢失分号丢失是C语言中另一个常见的语法错误。
在C语言中,分号用于分隔语句,如果遗漏了分号,编译器就无法识别出语句的结束。
解决方法:检查每一行语句的末尾,确保每个语句都以分号结尾。
3. 变量未声明在使用变量之前,必须先声明该变量。
如果没有先声明变量就直接使用,编译器将无法识别该变量,从而报错。
解决方法:在使用变量之前,先进行变量声明。
二、逻辑错误1. 循环控制条件错误在编写循环语句时,控制条件的错误是常见的逻辑错误。
如果循环的控制条件错误,循环可能无法正常结束或者根本无法执行。
解决方法:仔细检查循环的控制条件,确保条件符合预期,并在循环体内更新循环变量。
2. 数组越界访问在C语言中,数组的索引从0开始,通过索引访问数组元素时,如果索引超出了数组的范围,就会导致数组越界访问的错误。
解决方法:确保数组索引在正确的范围内,避免越界访问。
如果需要遍历数组,可以使用循环来控制数组的访问范围。
三、其他常见问题及解决方法1. 变量类型不匹配在赋值操作或者表达式计算时,如果不同类型的变量之间进行操作,则会导致变量类型不匹配的错误。
解决方法:确保操作的变量类型相同或者进行强制类型转换,以保证变量类型的匹配。
2. 内存泄漏在C语言中,手动分配内存的操作是常见的。
如果分配了内存空间,但在使用完毕后未及时释放,就会导致内存泄漏。
C语言常见错误与调试方法

C语言常见错误与调试方法在学习和使用C语言的过程中,出现错误是很常见的。
这些错误可能会导致程序无法正常运行或产生不符合预期的结果。
为了提高代码的质量和效率,我们需要了解常见的C语言错误,并学会相应的调试方法。
1. 语法错误语法错误是最常见的错误类型之一。
它们通常是由于拼写错误、标点符号的错误、缺少分号以及错误的语法结构等问题导致的。
为了避免语法错误,我们应该养成良好的编程习惯,例如检查拼写和标点符号、使用代码缩进和注释来提高代码的可读性。
当遇到语法错误时,我们应该仔细检查所在代码行及其前后的语句,查找可能存在的拼写错误或语法结构错误。
有时,观察编译器给出的错误提示信息也是解决语法错误的关键。
2. 逻辑错误逻辑错误是指程序运行时产生错误结果、逻辑混乱或无法按照预期执行的情况。
这些错误通常是由于程序员的思考不清晰或对问题理解不准确导致的。
要避免逻辑错误,我们需要仔细分析和推理代码的逻辑,确保我们的代码能够完整地涵盖目标问题。
此外,我们还可以使用调试工具来帮助捕捉逻辑错误,例如使用调试器逐步跟踪代码的执行路径、使用断点来观察变量值等。
当遇到逻辑错误时,我们可以尝试使用输出语句在关键位置输出变量的值,以便观察程序的执行情况。
另外,调试工具提供了代码的逐行执行功能,我们可以逐步检查代码并观察变量的值,从而找出逻辑错误的根源。
3. 数组越界错误数组越界错误是指在访问数组元素时超出了数组的范围。
这样的错误可能会导致程序崩溃或者产生不可预测的结果。
为了避免数组越界错误,我们需要确保在访问数组元素之前检查数组的边界。
此外,我们还可以使用循环结构来遍历数组,并通过循环变量来控制访问数组的索引。
当遇到数组越界错误时,我们应该检查涉及的所有循环和条件语句,确定数组索引的范围是否正确。
此外,一些编译器会提供工具来检测数组越界错误,我们可以使用这些工具来优化代码和修复错误。
4. 内存泄漏错误内存泄漏错误是指在程序运行过程中未正确释放不再使用的内存。
C语言常见错误分析和程序调试

C语言常见错误分析和程序调试C语言是一种常见的编程语言,在使用的过程中,常常会出现一些错误。
本文将分析C语言常见的错误,以及如何进行程序调试。
1.语法错误:语法错误是最常见的错误类型之一、它通常是由于拼写错误、缺少分号或括号不匹配等简单的错误导致的。
解决方法是仔细检查代码,确保所有括号都是成对且正确使用,并及时修正拼写错误。
2.逻辑错误:逻辑错误是指程序的逻辑错误,即程序没有按照预期的方式执行。
这种错误很难被编译器检测到,需要程序员自己进行调试。
解决方法一是使用printf语句来输出变量的值,以观察程序的执行过程;二是使用调试工具,如GDB,来逐步执行程序并观察变量的值。
3.内存错误:内存错误是指在程序中使用了未分配或已释放的内存。
这种错误通常会导致程序崩溃或产生不可预测的结果。
解决方法是保证正确地使用内存函数,如malloc和free,并养成好的编程习惯,即分配内存时要确保及时释放。
4.数组越界:数组越界是指程序访问了数组范围之外的元素。
这种错误可能会导致程序崩溃或产生不可预测的结果。
解决方法是仔细检查数组的索引,并确保索引的值在合法范围内。
5.变量未初始化:未初始化的变量可能包含随机的垃圾值,从而导致程序的不稳定或不可预测的结果。
解决方法是在使用变量之前,先给变量赋初始值。
6.常量溢出:常量溢出是指常量值超过了其数据类型的范围。
解决方法是使用合适的数据类型,并确保常量值在其范围之内。
7.函数调用错误:函数调用错误可能是函数名拼写错误、函数参数类型不匹配或函数调用位置错误等。
解决方法是仔细检查函数名的拼写,确保函数参数与定义一致,并确保函数调用位置正确。
总之,在编写C语言程序时,应该注意避免语法错误,正确使用内存函数和数组索引,初始化变量,选择合适的数据类型,并仔细检查函数调用。
此外,对于逻辑错误,可以通过打印输出和调试工具来进行程序调试,帮助定位问题并解决错误。
C语言技术中的常见代码错误解析

C语言技术中的常见代码错误解析在学习和使用C语言时,我们经常会遇到各种各样的代码错误。
这些错误可能会导致程序无法正常运行,甚至崩溃。
本文将对C语言技术中的一些常见代码错误进行解析,帮助读者更好地理解和避免这些错误。
1. 语法错误语法错误是最常见的错误之一,它们通常是由于拼写错误、缺少分号或括号不匹配等问题引起的。
例如,下面的代码中缺少了一个分号:```cint a = 10```这个错误可以通过简单地在行尾添加一个分号来修复。
2. 数组越界错误数组越界错误是指访问数组时超出了数组的边界。
例如,如果一个数组有10个元素,但是我们试图访问第11个元素,就会发生数组越界错误。
这种错误可能导致程序崩溃或产生不可预测的结果。
为了避免数组越界错误,我们应该始终确保我们的数组索引在合法的范围内。
可以使用条件语句或循环来检查数组索引是否越界。
3. 空指针错误空指针错误是指试图访问空指针所引用的内存位置。
当我们声明一个指针变量但没有为其分配内存时,它的值将为NULL。
如果我们试图通过一个空指针来访问内存,就会发生空指针错误。
为了避免空指针错误,我们应该始终在使用指针之前为其分配内存,并在使用指针之后及时释放内存。
4. 逻辑错误逻辑错误是指程序中的错误逻辑或错误的算法。
这种错误可能导致程序的输出不正确或产生意外的结果。
例如,如果我们在一个循环中使用错误的条件,循环可能永远不会结束,或者我们可能会得到错误的结果。
为了避免逻辑错误,我们应该仔细检查我们的代码逻辑,并确保它符合我们的预期。
5. 内存泄漏内存泄漏是指在程序中分配了内存但没有及时释放。
如果我们反复分配内存而没有释放,最终会导致内存耗尽,从而使程序崩溃。
为了避免内存泄漏,我们应该始终在使用完内存后及时释放它。
可以使用free()函数来释放动态分配的内存。
6. 类型错误类型错误是指将一个变量赋给错误的数据类型,或者试图对不兼容的数据类型进行操作。
例如,将一个整数赋给一个字符变量,或者试图对一个字符串进行算术运算。
c语言中经常遇到的问题

c语言中经常遇到的问题在C语言中,有一些常见的问题可能会困扰许多初学者。
在本文中,我将介绍几个经常出现问题的情况,并提供相应的解决方案。
1. 编译错误编译错误是C语言中常见的问题。
它们通常是由于语法错误、函数或变量未定义、拼写错误等导致的。
为了解决这个问题,您可以仔细检查代码,确保所有的拼写都正确,函数和变量都已定义,并且语法是正确的。
另外,使用编译器提供的错误信息来定位问题所在,这将帮助您更快地解决编译错误。
2. 逻辑错误逻辑错误是编程过程中另一个常见的问题。
这类错误在程序编译和运行时都不会出现错误,但程序的输出结果可能与预期不符。
要解决逻辑错误,您可以使用调试工具,例如在代码中插入调试语句、使用断点等。
通过逐步执行代码并检查变量的值,您可以找到导致逻辑错误的地方,并修复它们。
3. 内存泄漏内存泄漏是指程序在分配内存后,未释放已使用的内存空间。
这会导致程序占用过多的内存,并最终导致程序崩溃。
要解决内存泄漏问题,您需要确保在使用完内存后,通过调用"free"函数来释放内存空间。
此外,您还可以使用内存调试工具来检测和解决内存泄漏问题。
4. 数组越界在C语言中,数组越界错误是一种常见的错误。
当我们尝试访问数组中不存在的索引位置时,会导致程序出现异常或崩溃。
为了避免数组越界错误,您需要确保在访问数组元素之前检查数组索引的有效性,并确保不超过数组的边界。
5. 垃圾值垃圾值是指在变量声明后,未初始化或未赋予有效值的情况下,变量中存在的未知值。
为了解决垃圾值问题,您应该始终在声明变量后,给其一个有效的初值。
这样可以避免使用未定义的变量值造成的程序错误。
在C语言中经常遇到的问题包括编译错误、逻辑错误、内存泄漏、数组越界和垃圾值。
通过仔细检查代码、使用调试工具,以及遵循良好的编程实践,您可以解决这些问题并提高程序的质量。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一·不知道你用的是什么编译器,我帮你搞定了。
头文件#include "stdafx.h"必须放在第一位;清屏的函数也要头文件#include "conio.h";input 类型是int型的,main函数也要弄成int类型的。
还有char No[100];你要定义成数组撒,基本上有错的地方都帮你弄完了,完全没错误,能实现你的功能了,分给我吧,呵呵。
// 3.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"#include "stdio.h" /*输入输出函数*/#include "string.h" /*字符串函数*/#include "malloc.h" /*动态内存分配*/#include "stdlib.h" /*杂项及内存分配函数*/#include "conio.h"typedef struct Node{char No[40];char Name[40];float Math;float Chinese;float sum;struct Node *prior;struct Node *next;}Node,*Link;Link head, s1, s2;struct Node *s;int n = 0, k = 0;void shuru(); /*函数调用声明*/void chaxun();void paixu();void xiugai();void shanchu();int main() /*主函数*/{int input;// clrscr(); /*清屏函数*/do{printf(" The inquire system for the students' scores\n ");printf("************************************************\n");printf(" 1>shuru\n "); printf(" 2>chaxun\n "); printf(" 3>paixu\n "); printf(" 4>xiugai\n "); printf(" 5>shanchu\n "); printf("************************************************\n");printf("please give me a choice:1,2,3,4,5,6\n ");scanf("%d",&input);switch(input){case 1:shuru();break;case 2:chaxun();break;case 3:paixu();break;case 4:xiugai();break;case 5:shanchu();break;default:printf("Something is wrong!\n");}}while(input);}void shuru() /*学生成绩输入*/ {int m;head = (Link)malloc(sizeof(Node));s = head;do{s->next = (Link)malloc(sizeof(Node));s = s->next;s->next = NULL;printf("Please input the No,Name,Math,Chinese\n");scanf("%s%s%f%f",s->No,s->Name,&s->Math,&s->Chinese);s->sum = s->Math+s->Chinese;n++;printf("Do you want to go on? 1 = yes,0 = no\n");scanf("%d",&m);}while(m);}void chaxun() /*学生成绩查询*/{int m;char No[100];do{s1 = head->next;printf("Please input the No\n");scanf("%s",No);while((strcmp(s1->No,No)) != 0 && (s1 != NULL)) /*比较两个字符串,大小相等时值为0*/{s1=s1->next;}printf("****No****Name****Math****Chinese*******\n");if(s1!=NULL){k=1;printf("%s%s%f%f%f",s1->No,s1->Name,s1->Math,s1->Chinese,s1->sum);}else{k=0;printf("your input is wrong!\n");}printf("Do you want to go on? 1 = yes,0 = no\n");scanf("%d",&m);}while(m);}void paixu() /*学生成绩排序*/{int x, y, z, m=1;float sum[50], n;s2 = head->next;x = 0;while(s2!=NULL)sum[x] = s2->sum;s2 = s2->next;x++;}for(y = 0; y < n; y++){for(z = y+1; z < n; z++)if(sum[y] < sum[z]){n=sum[z];sum[z]=sum[y];sum[y]=n;}}printf("***************paixu*******************\n");for(z = 0; z < x; z++){s2 = head->next;while(!(abs(s2->sum-sum[z]) < 1e-10))s2 = s2->next;printf("%d%s%s%f%f%f\n",m,s2->No,s2->Name,s2->Math,s2->Chinese,s2->sum);m++;}getch(); /*屏幕暂停直到用户按任意键结束*/}void xiugai() /*学生成绩修改*/{float p, q;int time;char Name[40];s=head->next;do{chaxun();if(k==1) /*调用"chaxun"函数中k的结果*/ {printf("Input the new name\n");scanf("%s",Name);printf("Input the new score of Math and Chinese\n ");scanf("%f%f",&p,&q);strcpy(s->Name,Name); /*把Name代表的字符复制到数组中*/s->Math = p;s->Chinese = q;s->sum = s->Math+s->Chinese;printf(" OK! \n");}elseprintf("Something is wrong!\n");printf("Do you want to go on? 1=yes,0=no\n");scanf("%d",&time);}while(time);}void shanchu() /*学生成绩删除*/{int m;char No[100];do{s=head->next;printf("Please input the No\n");scanf("%s",No);while(strcmp(No,s->No)!=0&&s!=NULL) /*比较两个字符串,大小相等则为0*/{s=s->next;}printf("%s%s%f%f\n",s->No,s->Name,s->Math,s->Chinese);if(strcmp(No,s->No)==0){s->next->prior=s->prior;s->prior->next=s->next;printf(" OK! \n");n--;}elseprintf("Something is wrong!\n");printf("Do you want to go on? 1=yes, 0=no\n");scanf("%d",&m);}while(m);}2回答者:20066898 - 六级2009-10-13 21:56我来评论>>提问者对于答案的评价:谢谢大家都用心改了我的程序。
不过这位老兄不但细心帮我改了这么多,还教会了我很多东西。
谢谢了!!相关内容• 高手帮看下本人的C语言程序设计错在哪里啊,急!! 2009-9-17• C语言程序设计(高手帮帮忙急~~!!) 2009-1-12• 请高手帮我修改语法错误。
(急,在线等) 2 2007-4-9• 请高手帮我做个C语言程序设计 1 2008-4-9• 希望哪个高手帮我解决一个C语言程序设计的题,谢谢 1 2009-6-28更多相关问题>>typedef struct Node{char No[40];char Name[40];float Math;float Chinese;float sum;struct Node *prior;struct Node *next;}Node,*Link;Link head, s1, s2;struct Node *s;int n = 0, k = 0;void shuru(); /*函数调用声明*/void chaxun();void paixu();void xiugai();void shanchu();main() /*主函数*/{int input;// clrscr(); /*清屏函数*/do{printf(" The inquire system for the students' scores\n ");printf("************************************************\n");printf(" 1>shuru\n "); printf(" 2>chaxun\n "); printf(" 3>paixu\n "); printf(" 4>xiugai\n "); printf(" 5>shanchu\n "); printf("************************************************\n");printf("please give me a choice:1,2,3,4,5,6\n "); scanf("%d",&input);switch(input){case 1:shuru();break;case 2:chaxun();break;case 3:paixu();break;case 4:xiugai();break;case 5:shanchu();break;default:printf("Something is wrong!\n");}}while(input);}void shuru() /*学生成绩输入*/{int m;head = (Link)malloc(sizeof(Node));s = head;do{s->next = (Link)malloc(sizeof(Node));s = s->next;s->next = NULL;printf("Please input the No,Name,Math,Chinese\n");scanf("%s%s%f%f",s->No,s->Name,&s->Math,&s->Chinese);s->sum = s->Math+s->Chinese;n++;printf("Do you want to go on? 1 = yes,0 = no\n");scanf("%d",&m);}while(m);}void chaxun() /*学生成绩查询*/{int m;char No[40];do{s1 = head->next;printf("Please input the No\n");scanf("%s",No);while((strcmp(s1->No,No)) != 0 && (s1 != NULL)) /*比较两个字符串,大小相等时值为0*/{s1=s1->next;}printf("****No****Name****Math****Chinese*******\n");if(s1!=NULL){k=1;printf("%s%s%f%f%f",s1->No,s1->Name,s1->Math,s1->Chinese,s1->sum); }else{k=0;printf("your input is wrong!\n");}printf("Do you want to go on? 1 = yes,0 = no\n");scanf("%d",&m);}while(m);}void paixu() /*学生成绩排序*/{int x, y, z, m=1;float sum[50], n;s2 = head->next;x = 0;while(s2!=NULL){sum[x] = s2->sum;s2 = s2->next;x++;}for(y = 0; y < n; y++){for(z = y+1; z < n; z++)if(sum[y] < sum[z]){n=sum[z];sum[z]=sum[y];sum[y]=n;}}printf("***************paixu*******************\n");for(z = 0; z < x; z++){s2 = head->next;while(!(abs(s2->sum-sum[z]) < 1e-10))s2 = s2->next;printf("%d%s%s%f%f%f\n",m,s2->No,s2->Name,s2->Math,s2->Chinese,s2->sum);m++;}getch(); /*屏幕暂停直到用户按任意键结束*/}void xiugai() /*学生成绩修改*/{float p, q;int time;char Name[40];s=head->next;do{chaxun();if(k==1) /*调用"chaxun"函数中k的结果*/ {printf("Input the new name\n");scanf("%s",Name);printf("Input the new score of Math and Chinese\n ");scanf("%f%f",&p,&q);strcpy(s->Name,Name); /*把Name代表的字符复制到数组中*/s->Math = p;s->Chinese = q;s->sum = s->Math+s->Chinese;printf(" OK! \n");}elseprintf("Something is wrong!\n");printf("Do you want to go on? 1=yes,0=no\n");scanf("%d",&time);}while(time);}void shanchu() /*学生成绩删除*/{int m;char No[40];do{s=head->next;printf("Please input the No\n");scanf("%s",No);while(strcmp(No,s->No)!=0&&s!=NULL) /*比较两个字符串,大小相等则为0*/{s=s->next;}printf("%s%s%f%f\n",s->No,s->Name,s->Math,s->Chinese);if(strcmp(No,s->No)==0){s->next->prior=s->prior;s->prior->next=s->next;printf(" OK! \n");n--;}elseprintf("Something is wrong!\n");printf("Do you want to go on? 1=yes, 0=no\n");scanf("%d",&m);}while(m);}我只是帮你改了错,可以编译运行的,没有改你的实现算法...你这个是双向链表,但是你的前驱根本没有使用,可以使用单向链表的二·1.先学习C语言的基础知识。