c语言查缺补漏知识点程序设计问题

君,已阅读到文档的结尾了呢~~
C语言程序设计24的问题
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
C语言程序设计24的问题
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口[转载]C语言程序设计初学者常犯错误集锦(不断更新ing)
很多学习C语言的同学总会犯这样那样的低级错误,而主流的编辑器VC++6.0虽然可以指出这些错误,但有时候,它对低级错误并不那么敏感,让很多初学者觉得“情何以堪”呐!本人也是C程初学者,在这,将自己常犯的一些错误列出来,并指出错误原因,希望对大家有帮助。另外,大家自己有什么典型错误的,也可一起分享,让我们一起努力吧!O(∩_∩)O~
一、从最简单的漏字多字开始吧:
&1.1 在scanf赋值时漏&,
实例如下:
编译器产生如下错误提示:
snowkey.cpp(7) : warning C4700: local variable 'c' used without
having been initialized
snowkey.cpp(7) : warning C4700: local variable 'b' used without
having been initialized
snowkey.cpp(7) : warning C4700: local variable 'a' used without
having been initialized
意:局部变量的使用没有被初始化
1.2 main函数后加;
会产生一系列错误指示,系统会认为你main函数没定义,事实上,你只是多了加了个分号而已,典型如下:
编译器产生如下错误提示:
(4) : error C2449: found '{' at file scope (missing function
(17) : error C2059: syntax error : '}'
1.3 定义数据类型时漏逗号,
&也会产生一系列错误:
编译器产生如下错误提示:
(4) : error C2146: syntax error : missing ';' before
identifier 'n'
(4) : error C2065: 'n' : undeclared identifier
(4) : error C2146: syntax error : missing ';' before identifier
(4) : error C2065: 'sum' : undeclared identifier
这几条错误最容易误导初学者,表面上说missing ';',事实上,是少了个逗号。事实上,“syntax error : missing ';' before identifier
'n'”和“'n' : undeclared
identifier”要合起来理解。
1.4 printf函数没有用双引号括起来:
编译器产生如下错误提示:
&error C2001: newline in constant
&error C2146: syntax error : missing ')' before
identifier 'scanf'
意:新的一行没断开(指printf函数)
语法错误,少了)在定义scanf函数前
事实上,是少了"
同样的道理,如果在后面漏了字母(如换行符n),也会显示同样的错误信息,要仔细查看,一般来说,把那整行仔细检查一遍就可发现错误原因。实例如下:
编译器产生如下错误提示:
error C2001: newline in constant
error C2146: syntax error : missing ')' before identifier
'scanf'(和上面的一样)
漏赋初始值直接进入循环加这种错误时灰常致命的因为编译器往往检测不出,程序也能运行,但运行结果往往是错的。实例如下:
上例中(用于求一个数的位数及位数之和的核心部分),cout未赋初始值,直接使用cout++,导致错误。
然而,编译器却显示:
0 error(s), 0 warning(s)
对这种隐形的错误,一开始总让人头疼,但有错误经验了,就知道该往哪些方向去查错了。
&&&&同样的情况我还遇到过的是,使用scanf函数的时候,对于double型数据,输成了%f,导致程序语法正确,逻辑错误,检查了很久才发现。大家在初学C的时候一定要注意double类型的输入输出格式是不同(%lf
二、函数类错误
2.1 调用函数时,误用已赋值参数:
编译器产生如下错误提示:
error C2082: redefinition of formal parameter 'n'
意:重新定义n
由于在main函数中n已经被赋值,故自定义的p函数就不可在重新使用n,可换用i,ri等任何不与main函数冲突的参数。
后记:找到个网址,里面也有很多错误的集合,有兴趣的朋友可以进一步阅读
为了方便大家,我还是COPY过来了
VC++编译的常见错误
1、fatal error C1010: unexpected
end of file while looking for precompiled header directive。
寻找预编译头文件路径时遇到了不该遇到的文件尾。(一般是没有#include "stdafx.h")
2、fatal error C1083: Cannot open include file: 'R…….h': No such
file or directory
不能打开包含文件“R…….h”:没有这样的文件或目录。
3、error C2011: 'C……': 'class' type redefinition
类“C……”重定义。
4、error C2018: unknown character '0xa3'
不认识的字符'0xa3'。(一般是汉字或中文标点符号)
5、error C2057: expected constant expression
希望是常量表达式。(一般出现在switch语句的case分支中)
6、error C2065: 'IDD_MYDIALOG' : undeclared identifier
“IDD_MYDIALOG”:未声明过的标识符。
7、error C2082: redefinition of formal parameter 'bReset'
函数参数“bReset”在函数体中重定义。
8、error C2143: syntax error: missing ':' before '{'
句法错误:“{”前缺少“;”。
9、error C2146: syntax error : missing ';' before identifier
句法错误:在“dc”前丢了“;”。
10、error C2196: case value '69' already used
值69已经用过。(一般出现在switch语句的case分支中)
11、error C2509: 'OnTimer' : member function not declared in
'CHelloView'
成员函数“OnTimer”没有在“CHelloView”中声明。
12、error C2511: 'reset': overloaded member function 'void (int)'
not found in 'B'
重载的函数“void reset(int)”在类“B”中找不到。
13、error C2555: 'B::f1': overriding virtual function differs from
'A::f1' only by return type or calling convention
类B对类A中同名函数f1的重载仅根据返回值或调用约定上的区别。
14、error C2660: 'SetTimer' : function does not take 2
parameters
“SetTimer”函数不传递2个参数。
15、warning C4035: 'f……': no return value
“f……”的return语句没有返回值。
16、warning C4553: '= =' : op did you intend
没有效果的运算符“= =”;是否改为“=”?
17、warning C4700: local variable 'bReset' used without having been
initialized
局部变量“bReset”没有初始化就使用。
18、error C4716: 'CMyApp::InitInstance' : must return a value
“CMyApp::InitInstance”函数必须返回一个值。
19、LINK : fatal error LNK1168: cannot open Debug/P1.exe for
连接错误:不能打开P1.exe文件,以改写内容。(一般是P1.Exe还在运行,未关闭)
20、error LNK2001: unresolved external symbol "public: virtual _
_thiscall C……::~C……(void)"
连接时发现没有实现的外部符号(变量、函数等)
VC6.0编译常见错误
第一部分 编译错误
C2001: newline in constant
编号:C2001
直译:在常量中出现了换行。
错误分析:
字符串常量、字符常量中是否有换行。
在这句语句中,某个字符串常量的尾部是否漏掉了双引号。
在这语句中,某个字符创常量中是否出现了双引号字符“"”,但是没有使用转义符“"”。
在这句语句中,某个字符常量的尾部是否漏掉了单引号。
是否在某句语句的尾部,或语句的中间误输入了一个单引号或双引号。
C2015: too many characters in constant
编号:C2015
直译:字符常量中的字符太多了。
错误分析:
单引号表示字符型常量。一般的,单引号中必须有,也只能有一个字符(使用转义符时,转义符所表示的字符当作一个字符看待),如果单引号中的字符数多于4个,就会引发这个错误。
另外,如果语句中某个字符常量缺少右边的单引号,也会引发这个错误,例如:
if (x == 'x || x ==
'y') { … }
值得注意的是,如果单引号中的字符数是2-4个,编译不报错,输出结果是这几个字母的ASC码作为一个整数(int,4B)整体看待的数字。
两个单引号之间不加任何内容会引发如下错误:error C2137: empty
character constant。
C2018: unknown character '0x##'
编号:C2018
直译:未知字符‘0x##’。
错误分析:
0x##是字符ASC码的16进制表示法。这里说的未知字符,通常是指全角符号、字母、数字,或者直接输入了汉字。如果全角字符和汉字用双引号包含起来,则成为字符串常量的一部分,是不会引发这个错误的。
C2041: illegal digit '#' for base '8'
编号:C2141
直译:在八进制中出现了非法的数字‘#’(这个数字#通常是8或者9)。
错误分析:
如果某个数字常量以“0”开头(单纯的数字0除外),那么编译器会认为这是一个8进制数字。例如:“089”、“078”、“093”都是非法的,而“071”是合法的,等同于是进制中的“57”。
C2065: 'xxxx' : undeclared identifier
编号:C2065
直译:标识符“xxxx”未定义。
错误分析:
首先,解释一下什么是标识符。标志符是程序中出现的除关键字之外的词,通常由字母、数字和下划线组成,不能以数字开头,不能与关键字重复,并且区分大小写。变量名、函数名、类名、常量名等等,都是标志符。所有的标志符都必须先定义,后使用。标志符有很多种用途,所以错误也有很多种原因。
如果“xxxx”是一个变量名,那么通常是程序员忘记了定义这个变量,或者拼写错误、大小写错误所引起的,所以,首先检查变量名是否正确。(关联:变量,变量定义)
如果“xxxx”是一个函数名,那就怀疑函数名是否没有定义。可能是拼写错误或大小写错误,当然,也有可能是你所调用的函数根本不存在。还有一种可能,你写的函数在你调用所在的函数之后,而你有没有在调用之前对函数原形进行申明。(关联:函数申明与定义,函数原型)
如果“xxxx”是一个库函数的函数名,比如“sqrt”、“fabs”,那么看看你在cpp文件已开始是否包含了这些库函数所在的头文件(.h文件)。例如,使用“sqrt”函数需要头文件math.h。如果“xxxx”就是“cin”或“cout”,那么一般是没有包含“iostream.h”。(关联:#include,cin,cout)
如果“xxxx”是一个类名,那么表示这个类没有定义,可能性依然是:根本没有定义这个类,或者拼写错误,或者大小写错误,或者缺少头文件,或者类的使用在申明之前。(关联:类,类定义)
标志符遵循先申明后使用原则。所以,无论是变量、函数名、类名,都必须先定义,后使用。如使用在前,申明在后,就会引发这个错误。
C++的作用域也会成为引发这个错误的陷阱。在花括号之内变量,是不能在这个花括号之外使用的。类、函数、if、do(while)、for所引起的花括号都遵循这个规则。(关联:作用域)
前面某句语句的错误也可能导致编译器误认为这一句有错。如果你前面的变量定义语句有错误,编译器在后面的编译中会认为该变量从来没有定义过,以致后面所有使用这个变量的语句都报这个错误。如果函数申明语句有错误,那么将会引发同样的问题。
C2086: 'xxxx' : redefinition
编号:C2374
直译:“xxxx”重复申明。
错误分析:
变量“xxxx”在同一作用域中定义了多次。检查“xxxx”的每一次定义,只保留一个,或者更改变量名。
C2374: 'xxxx' : multiple
initialization
编号:C2374
直译:“xxxx”重复申明,多次初始化。
错误分析:
变量“xxxx”在同一作用域中定义了多次,并且进行了多次初始化。检查“xxxx”的每一次定义,只保留一个,或者更改变量名。
8. C2143:
syntax error : missing ';' before (identifier)
编号:C2143
直译:在(标志符)“xxxx”前缺少分号。
错误分析:
这是VC6的编译期最常见的误报,当出现这个错误时,往往所指的语句并没有错误,而是它的上一句语句发生了错误。其实,更合适的做法是编译器报告在上一句语句的尾部缺少分号。上一句语句的很多种错误都会导致编译器报出这个错误:
上一句语句的末尾真的缺少分号。那么补上就可以了。
上一句语句不完整,或者有明显的语法错误,或者根本不能算上一句语句(有时候是无意中按到键盘所致)。
如果发现发生错误的语句是cpp文件的第一行语句,在本文件中检查没有错误,而且这个文件使用双引号包含了某个头文件,那么检查这个头文件,在这个头文件的尾部可能有错误。
C2137: empty character constant
编号:C2137
直译:空的字符定义。
错误分析:
原因是连用了两个单引号,而中间没有任何字符。一般的,单引号表示字符型常量,单引号中必须有,也只能有一个字符(使用转义符时,转义符所表示的字符当作一个字符看待)。两个单引号之间不加任何内容是不允许的。
需要注意的是:如果单引号中的字符数是2-4个,编译不报错,输出结果是这几个字母的ASC码作为一个整数(int,4B)整体看待的数字。
如果单引号中的字符数多于4个,会引发2015错误:error C2015: too many
characters in constant。
10. error
C2374: 'xxxx' : multiple
initialization
编号:C2374
直译:“xxxx”重复申明,多次初始化。
错误分析:
变量“xxxx”在同一作用域中定义了多次,并且进行了多次初始化。检查“xxxx”的每一次定义,只保留一个,或者更改变量名。
第二部分 链接错误
LNK2001: unresolved external symbol _main
编号:LNK2001
直译:未解决的外部符号:_main。
错误分析:缺少main函数。看看main的拼写或大小写是否正确。
LNK2005: _main already defined in xxxx.obj
编号:LNK2005
直译:_main已经存在于xxxx.obj中了。
错误分析:
直接的原因是该程序中有多个(不止一个)main函数。这是初学C++的低年级同学在初次编程时经常犯的错误。这个错误通常不是你在同一个文件中包含有两个main函数,而是在一个project(项目)中包含了多个cpp文件,而每个cpp文件中都有一个main函数。引发这个错误的过程一般是这样的:你写完成了一个C++程序的调试,接着你准备写第二个C++文件,于是你可能通过右上角的关闭按钮关闭了当前的cpp文件字窗口(或者没有关闭,这一操作不影响最后的结果),然后通过菜单或工具栏创建了一个新的cpp文件,在这个新窗口中,程序编写完成,编译,然后就发生了以上的错误。原因是这样的:你在创建第二个cpp文件时,没有关闭原来的项目,所以你无意中新的cpp文件加入你上一个程序所在的项目。切换到“File
View”视图,展开“Source Files”节点,你就会发现有两个文件。
在编写C++程序时,一定要理解什么是Workspace、什么是Project。每一个程序都是一个Project(项目),一个Project可以编译为一个应用程序(*.exe),或者一个动态链接库(*.dll)。通常,每个Project下面可以包含多个.cpp文件,.h文件,以及其他资源文件。在这些文件中,只能有一个main函数。初学者在写简单程序时,一个Project中往往只会有一个cpp文件。Workspace(工作区)是Project的集合。在调试复杂的程序时,一个Workspace可能包含多个Project,但对于初学者的简单的程序,一个Workspace往往只包含一个Project。
当完成一个程序以后,写另一个程序之前,一定要在“File”菜单中选择“Close
Workspace”项,已完全关闭前一个项目,才能进行下一个项目。避免这个错误的另一个方法是每次写完一个C++程序,都把VC6彻底关掉,然后重写打开VC6,写下一个程序。
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。有没有C语言编程高手
真心的求教问题_李毅吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:26,126,110贴子:
有没有C语言编程高手
真心的求教问题
今晚就交作业了
票牛教你如何买到热门、便宜、真实的演出门票!
C++专家中不?
在D8问,发帖问就行了
回文字符串就是正读和反读都相同的字符串,约定空串不算回文字符串,容易看出单个字符看作字符串都是回文字符串,二个字符形成的字符串仅在二个字符相同时是回文字符串。可以定义一个任意字符串的稳定和谐数为它的子串是回文字符串的数目,例如字符串aab,稳定和谐数为4,因为有回文子串4 个:a, a, b, aa;字符串ababa, 稳定和谐数为9, 因为有回文子串9个:a, b, a, b, a, aba, bab, aba, ababa;
提出的问题是请你编写程序:(1)输入一个任意字符串,输出它得稳定和谐数。(2)输入一个任意字符串,允许并且只允许修改其中一个字符,使这个字符串能够具有最大的稳定和谐数,输出这个稳定和谐数。例如,输入aab,应输出6,因为修改为aaa后,有回文子串a, a, a, aa, aa, aaa, 这也是aaa的全部子串。
提示:(1)容易做一个判断任意字符串是否为回文字符串的函数,对于长n的字符串,其长为s的子串有n-s+1个,长1的子串n个自然计入,再对s从2至n,检查回文子串个数。(2)直接的想法是枚举法,即逐个修改每个字符并计算回文子串个数。一个可以考虑的启发式规则是将出现少的字符修改为出现多的字符。
午休,下午上班看有时间帮你没。反正晚上才交
4点前 私信我中不
大神 十分感谢
手工地毯 鑫毅地毯 足下温馨
java中不?
include &string&class D8String{private: string strDpublic: D8String(string& str); bool isCircleText(unsigned int startPos,unsigned int endPos); unsigned int computeCount(); unsigned int exceptCount();};D8String::D8String(string& str){ strData=}bool D8String::isCircleText(unsigned int startPos,unsigned int endPos){ int textLength=endPos-startPos+1; if (textLength==1) {
for(int i=0;i&textLi++)//这里可以优化,需要的话自行修改
if (strData[startPos+i]==strData[endPos-i])
}}unsigned int D8String::computeCount(){ int count(0); for(auto m=0;m&strData.size();m++) {
for (auto n=m;n&strData.size();n++)
if (isCircleText(m,n)==true)
} } }unsigned int D8String::exceptCount(){ int count(0); for(int m=0;m&strData.size();m++) {
for (int c='A';c&='z';c++)
strData[m]=(char)c;
int expCount=computeCount();
if (expCount&count)
count=expC
} } }int main(){
cout&&"请输入字符串:"; cin&& D8String d8s(str); cout&&"当前字符串稳定和谐数"&&puteCount()&& cout&&"替换字符可产生的最大和谐数"&&d8s.exceptCount()&& return 0;}
特别注意:如果你的编译器不支持C++11标准,请把50行处的auto换成int运行结果如下:
48行的auto也换成int
回复16楼:传说中的程序猿
其实我是副总工程师我会到处乱说
回复18楼:还是程序猿…
给您跪了,我不是猿类。。。
D8果然是人才辈出....
本屌丝也是学c语言的,很在行!
那是C++ 不是C
给护再发C的,中不中?
我自学C语言的,有兴趣加我QQ群  进来一起讨论
判断用户输入的字符串是否为回文串输出该字符串的所有回文子串,并计算该字符串的稳定和谐数修改该字符串中的任意一个字符使得修改后的字符串具有最大稳定和谐数,输出该新串和最大稳定和谐数。求回答急急急,求大神回答,八点之前
贴吧热议榜
使用签名档&&
保存至快速回贴

我要回帖

更多关于 循环语句的嵌套 的文章

 

随机推荐