第一篇:黑馬程序員Python教程python re 模塊及正則表達(dá)式調(diào)用認(rèn)識(shí)-2
python re 模塊及正則表達(dá)式調(diào)用認(rèn)識(shí)-2
foo匹配foo,也可以是foobar。而正則foo$只配foo.>>> print re.search(r'foo$','foo').group()
foo
>>> print re.search(r'foo$','foobar').group()#匹配失敗
Traceback(most recent call last):
File “
”, line 1, in
print re.search(r'foo$','foobar').group()
AttributeError: 'NoneType' object has no attribute 'group'
>>>
在 'foo1nfoo2n' 中用foo.$進(jìn)行匹配可以得到foo2,但在MULTILINE模式中得到的是foo1.對(duì)$在’foon‘中進(jìn)行searching,則會(huì)匹配到兩個(gè)空白,一個(gè)在新行之前,一個(gè)在字符串的結(jié)尾。
>>> print re.search(r'foo.$','foo1nfoo2n').group()
foo2
>>> print re.search(r'foo.$','foo1nfoo2n',re.M).group()
foo1
>>>
>>> print re.search(r'$','foo1nfoo2n').group()
>>>
'*'----匹配前一個(gè)字符0次或無(wú)限次
>>> print re.search(r'fo*','foooo').group()
foooo
>>> print re.search(r'fo*','f').group()#可以匹配前一個(gè)字符零次
f
>>>
’+‘----匹配前一個(gè)字符1次或無(wú)限次。ab+將匹配a之后的b至少一次。
>>> print re.search(r'fo+','foooo').group()
foooo
>>> print re.search(r'fo+','f').group()
Traceback(most recent call last):
File “
”, line 1, in
print re.search(r'fo+','f').group()
AttributeError: 'NoneType' object has no attribute 'group'
>>>
’?‘----匹配前一個(gè)字符0次或一次。ab? 將匹配a 或者ab
>>> print re.search(r'fo?','foooo').group()
fo
>>> print re.search(r'fo?','f').group()
f
>>>
*?, +?,??----'*','+','?'都是貪婪匹配限定符;盡可能多的匹配內(nèi)容,但有時(shí)候沒(méi)必要這樣,’<.*>'對(duì)'
title
'進(jìn)行匹配,將會(huì)匹配整個(gè)字符串不只是'',對(duì)其限定符后添加‘?’,這樣就會(huì)得到非貪婪匹配或者得到最小匹配。盡可能的少匹配字符;用.*?在表達(dá)式之前,則會(huì)只匹配''。
>>> print re.search(r'fo*?','foeeeerrfoeeb').group()# *匹配零次
f
>>> print re.search(r'fo*?','foooorrfooob').group()
f
>>> print re.search(r'fo+?','foeeeerrfoeeb').group()# + 匹配一次
fo
>>> print re.search(r'fo+?','foooorrfooob').group()
fo
>>> print re.search(r'fo??','foeeeerrfoeeb').group()# ?匹配一次
f
>>> print re.search(r'fo??','foooorrfooob').group()
f
>>>
>>> print re.search(r'<.*>','
title
').group()title
>>> print re.search(r'<.*?>','
title
').group()>>>
對(duì)其限定符后添加‘?’,這樣就會(huì)得到非貪婪匹配或者得到最小匹配
{m}---剛好匹配m次,不少也不多
>>> print re.search(r'fo{3}','foooo').group()
fooo
>>> print re.search(r'fo{2}','foooo').group()
foo >>>
{m,n}----匹配正則m到n次,a{3,5} will match from 3 to 5'a' characters。m缺省時(shí)表示0,n缺省時(shí)表示無(wú)限次。a{4,}b will matchaaaab or a thousand'a' characters followed by ab, but notaaab.中間的逗號(hào)不能省略。
>>> print re.search(r'a{,4}b','aaab').group()
aaab >>> print re.search(r'a{4,}b','aaab').group()
Traceback(most recent call last):
File “
”, line 1, in
print re.search(r'a{4,}b','aaab').group()
AttributeError: 'NoneType' object has no attribute 'group' >>>
{m,n}?----非貪婪模式,匹配最少的m次。For example, on the 6-character string 'aaaaaa', a{3,5} will match 5'a' characters,while a{3,5}? will only match 3 characters.>>> print re.search(r'a{3,5}b','aaaaaab').group()
aaaaab
>>> print re.search(r'a{3,5}?b','aaaaaab').group()#這種后面還有字符的情況容易出錯(cuò),實(shí)際還是以n來(lái)計(jì)算的
aaaaab
>>> print re.search(r'a{3,5}?','aaaaaab').group()
aaa
>>>
‘'----轉(zhuǎn)義字符,用來(lái)匹配 *,?等等。不是使用raw string的情況下,Python also uses the backslash as an escape sequence in string literals;也就是不使用r'XXX時(shí),要使用兩次反斜杠才能表示一個(gè)反斜杠,用raw簡(jiǎn)單些。
>>> print re.search(r'a*?','aa*?b').group()
a*?
>>> print re.search('a*?','aa*?b').group()
a*?
>>>
[ ]---存放字符集,1)中括號(hào)中的字符可以是單個(gè)的,e.g.[amk] will match'a','m', or'k'.>>> print re.search('[amk]','sdafgfhmrtykyy').group()
a >>> print re.search('[amk].','sdafgfhmrtykyy').group()
af
>>> print re.search('[mka].','sdafgfhmrtykyy').group()
af
是或關(guān)系,匹配了a,就沒(méi)有再匹配 m,k。
第二篇:黑馬程序員Python教程python XlsxWriter模塊創(chuàng)建aexcel表格-1
python XlsxWriter模塊創(chuàng)建aexcel表格-1
安裝使用pip install XlsxWriter來(lái)安裝,Xlsxwriter用來(lái)創(chuàng)建excel表格,功能很強(qiáng)大,下面具體介紹:
1.簡(jiǎn)單使用excel的實(shí)例:
#coding:utf-8
import xlsxwriter
workbook = xlsxwriter.Workbook('d:suq estdemo1.xlsx')#創(chuàng)建一個(gè)excel文件
worksheet = workbook.add_worksheet('TEST')#在文件中創(chuàng)建一個(gè)名為T(mén)EST的sheet,不加名字默認(rèn)為sheet1
worksheet.set_column('A:A',20)
#設(shè)置第一列寬度為20像素
bold = workbook.add_format({'bold':True})#設(shè)置一個(gè)加粗的格式對(duì)象
worksheet.write('A1','HELLO')
#在A(yíng)1單元格寫(xiě)上HELLO
worksheet.write('A2','WORLD',bold)
#在A(yíng)2上寫(xiě)上WORLD,并且設(shè)置為加粗
worksheet.write('B2',U'中文測(cè)試',bold)#在B2上寫(xiě)上中文加粗
worksheet.write(2,0,32)
#使用行列的方式寫(xiě)上數(shù)字32,35,5
worksheet.write(3,0,35.5)
#使用行列的時(shí)候第一行起始為0,所以2,0代表著第三行的第一列,等價(jià)于A(yíng)4
worksheet.write(4,0,'=SUM(A3:A4)')#寫(xiě)上excel公式 worksheet.insert_image('B5','f:1.jpg')#插入一張圖片
workbook.close()
2.常用方法說(shuō)明 1.Workbook類(lèi)
Workbook類(lèi)創(chuàng)建一個(gè)XlsxWriter的Workbook對(duì)象,代表整個(gè)電子表格文件,存儲(chǔ)到磁盤(pán)上.add_worksheet():用來(lái)創(chuàng)建工作表,默認(rèn)為sheet1 add_format():創(chuàng)建一個(gè)新的格式對(duì)象來(lái)格式化單元格,例如bold=workbook.add_format({'bold':True})還可以使用set_bold,例如:bold=workbook.add_format()bold.set_bold()
#border:邊框,align:對(duì)齊方式,bg_color:背景顏色,font_size:字體大小,bold:字體加粗
top = workbook.add_format({'border':1,'align':'center','bg_color':'cccccc','font_size':13,'bold':True})
add_chart(options):創(chuàng)建一個(gè)圖表對(duì)象,內(nèi)部是使用insert_chart()方法來(lái)實(shí)現(xiàn)的,options(dict類(lèi)型)為圖表指定一個(gè)字典屬性 close():關(guān)閉文件
2.Worksheet類(lèi)
worksheet代表一個(gè)Excel的工作表,是XlsxWriter的核心,下面是幾個(gè)核心方法
write(row,col,*args):寫(xiě)普通數(shù)據(jù)到工作表的單元格,row行坐標(biāo),col列坐標(biāo),起始都是以0開(kāi)始,*args為寫(xiě)入的內(nèi)容,可以是字符串,文字,公式等,writer方法已經(jīng)作為其它更具體數(shù)據(jù)類(lèi)型方法的別名
write_string():寫(xiě)入字符串類(lèi)型,worksheet.write_string(0,0,'your text')write_number():寫(xiě)入數(shù)字類(lèi)型,worksheet.write_number('A2',1.1)write_blank():寫(xiě)入空類(lèi)型數(shù)據(jù),worksheet.write_blank('A2',None)wirte_formula():寫(xiě)入公式類(lèi)型,worksheet.write_formula(2,0,'=SUM(B1:B5))write_datetime():寫(xiě)入日期類(lèi)型數(shù)據(jù),worksheet.write_datetime(7,0,datetime.datetime.strptime('2014-01-02','%Y-%m-%d),workbook.add_format({'num_format':'yyyy-mm-dd'}));write_boolean():寫(xiě)入邏輯類(lèi)數(shù)據(jù),worksheet.write_boolean(0,0,True)write_url():寫(xiě)入超鏈接類(lèi)型數(shù)據(jù),worksheet.write_url('A1','ftp://004km.cn')write_column():寫(xiě)入到一列,后面接一個(gè)數(shù)組 wirte_row():寫(xiě)入到一行,后面接一個(gè)數(shù)組
set_row(row,height,cell_format,options):此方法設(shè)置行單元格的屬性,row指定行位置,height指定高度,單位是像素,cell_format指定格式對(duì)象,參數(shù)options設(shè)置hiddeen(隱藏),level(組合分級(jí)),collapsed(折疊,例如: cell_format=workbook.add_format({'bold':True})worksheet.set_row(0,40,cell_format)設(shè)置第一行高40,加粗
set_column(first_col,last_col,width,cell_format,options):設(shè)置列單元格的屬性,具體參數(shù)說(shuō)明如上.worksheet.set_column(0,1,10)worksheet.set_column('C:D',20)insert_image(row,col,image[,options]):此方法是插入圖片到指定單元格 例如插入一個(gè)圖片的超鏈接為004km.cn worksheet.insert_image('B5','f:1.jpg',{'url':'http://004km.cn'})
第三篇:黑馬程序員Python教程:Python培訓(xùn)專(zhuān)家:6個(gè)常見(jiàn)面試題
傳智播客Python培訓(xùn)專(zhuān)家:6個(gè)常見(jiàn)面試題
在面試中,有一定比例是字符串處理以及網(wǎng)絡(luò)編程那塊,當(dāng)然了肯定還有些其他的問(wèn)題,下面幫大家找了6道題目,接下來(lái)小試牛刀吧!很簡(jiǎn)單的哦。
第1題:
Q:是否遇到過(guò)python的模塊間循環(huán)引用的問(wèn)題,如何避免它? A:這是代碼結(jié)構(gòu)設(shè)計(jì)的問(wèn)題,模塊依賴(lài)和類(lèi)依賴(lài) 如果老是覺(jué)得碰到循環(huán)引用可能的原因有幾點(diǎn): 1.可能是模塊的分界線(xiàn)劃錯(cuò)地方了 2.可能是把應(yīng)該在一起的東西硬拆開(kāi)了 3.可能是某些職責(zé)放錯(cuò)地方了 4.可能是應(yīng)該抽象的東西沒(méi)抽象
總之微觀(guān)代碼規(guī)范可能并不能幫到太多,重要的是更宏觀(guān)的劃分模塊的經(jīng)驗(yàn)技巧,推薦uml,腦圖,白板等等圖形化的工具先梳理清楚整個(gè)系統(tǒng)的總體結(jié)構(gòu)和職責(zé)分工
采取辦法,從設(shè)計(jì)模式上來(lái)規(guī)避這個(gè)問(wèn)題,比如: 1.使用 “__all__” 白名單開(kāi)放接口 2.盡量避免 import
第2題:
Q: Python中如何定義一個(gè)函數(shù)
A: 有2種方法:
第1種:
def func(arg, *args, **kwagrs):
#普通函數(shù)
func_body
return
第2種:
lambda x: x **2
#匿名函數(shù)
第3題:
Q:請(qǐng)寫(xiě)出一段Python代碼實(shí)現(xiàn)刪除一個(gè)list里面的重復(fù)元素 A:
>>> L1 = [4,1,3,2,3,5,1]
>>> L2 = []
>>> [L2.append(i)for i in L1 if i not in L2]
>>> print L2
[4, 1, 3, 2, 5]
運(yùn)行結(jié)果如下圖:
第4題:
Q:Python是如何進(jìn)行內(nèi)存管理的
A: python內(nèi)部使用引用計(jì)數(shù),來(lái)保持追蹤內(nèi)存中的對(duì)象,Python內(nèi)部記錄了對(duì)象有多少個(gè)引用,即引用計(jì)數(shù),當(dāng)對(duì)象被創(chuàng)建時(shí)就創(chuàng)建了一個(gè)引用計(jì)數(shù),當(dāng)對(duì)象不再需要時(shí),這個(gè)對(duì)象的引用計(jì)數(shù)為0時(shí),它被垃圾回收。所有這些都是自動(dòng)完成,不需要像C一樣,人工干預(yù),從而提高了程序員的效率和程序的健壯性。
第5題:
Q:寫(xiě)一個(gè)簡(jiǎn)單的Python socket編程
A: socket是用來(lái)進(jìn)行網(wǎng)絡(luò)編程用的接口,網(wǎng)絡(luò)編程分為服務(wù)器端和客戶(hù)端
服務(wù)器端代碼如下: import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('localhost', 8001))
sock.listen(5)
while True:
conn, addr = sock.accept()
try:
conn.settimeout(5)
buff = conn.recv(1024)
if buff == '1':
conn.send('Hello, Client...')
else:
conn.send('Please, Go Out...')
except socket.timeout:
print 'Socket Time Out...'
finally:
conn.close()
客戶(hù)端代碼如下: import socket
import time
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost', 8001))
time.sleep(2)
sock.send('1')
print sock.recv(1024)
sock.close()
第6題:
Q:src = “security/afafsff/?ip=123.4.56.78&id=45”,請(qǐng)寫(xiě)一段代碼用正則匹配出IP
A:
import re
src = “security/afafsff/?ip=123.4.56.78&id=45”
m = re.search('ip=(d{1,3}.d{1,3}.d{1,3}.d{1,3})', src, re.S)# re.S 改變'.'的行為
print m.group(1)
# 輸出結(jié)果 >>> 123.4.56.78
運(yùn)行結(jié)果如下:
第四篇:黑馬程序員C語(yǔ)言教程:帶你淺出python爬蟲(chóng)框架scrapy二)
帶你深入淺出python爬蟲(chóng)框架scrapy(二)之前我們學(xué)習(xí)了scrapy的安裝,接下來(lái)我們先簡(jiǎn)單的介紹一下使用。
一、創(chuàng)建一個(gè)新的Scrapy項(xiàng)目
scrapy startproject itcast 結(jié)構(gòu)如下
│ scrapy.cfg │
└─itcast │ items.py
│ pipelines.py
│ settings.py
│ __init__.py
│
└─spiders __init__.py
這些文件主要是:
? ? ? ? ? ? scrapy.cfg: 項(xiàng)目配置文件
itcast/: 項(xiàng)目python模塊, 呆會(huì)代碼將從這里導(dǎo)入 itcast/items.py: 項(xiàng)目items文件 itcast/pipelines.py: 項(xiàng)目管道文件 itcast/settings.py: 項(xiàng)目配置文件 itcast/spiders: 放置spider的目錄
二、定義提取的Item 它通過(guò)創(chuàng)建一個(gè)scrapy.item.Item類(lèi)來(lái)聲明,定義它的屬性為scrpy.item.Field對(duì)象,就像是一個(gè)對(duì)象關(guān)系映射(ORM).我們通過(guò)將需要的item模型化,來(lái)控制從dmoz.org獲得的站點(diǎn)數(shù)據(jù),比如我們要獲得站點(diǎn)的名字,url和網(wǎng)站描述,我們定義這三種屬性的域。要做到這點(diǎn),我們編輯在itcast目錄下的items.py文件,我們的Item類(lèi)將會(huì)是這樣
from scrapy.item import Item, Field class DmozItem(Item): title = Field()link = Field()desc = Field()
三、寫(xiě)一個(gè)Spider用來(lái)爬行站點(diǎn),并提取Items
Spider是用戶(hù)編寫(xiě)的類(lèi),用于從一個(gè)域(或域組)中抓取信息。
他們定義了用于下載的URL的初步列表,如何跟蹤鏈接,以及如何來(lái)解析這些網(wǎng)頁(yè)的內(nèi)容用于提取items。要建立一個(gè)Spider,你必須為scrapy.spider.BaseSpider創(chuàng)建一個(gè)子類(lèi),并確定三個(gè)主要的、強(qiáng)制的屬性:
? ? name:爬蟲(chóng)的識(shí)別名,它必須是唯一的,在不同的爬蟲(chóng)中你必須定義不同的名字.start_urls:爬蟲(chóng)開(kāi)始爬的一個(gè)URL列表。爬蟲(chóng)從這里開(kāi)始抓取數(shù)據(jù),所以,第一次下載的數(shù)據(jù)將會(huì)從這些URLS開(kāi)始。其他子URL將會(huì)從這些起始URL中繼承性生成。
? parse():爬蟲(chóng)的方法,調(diào)用時(shí)候傳入從每一個(gè)URL傳回的Response對(duì)象作為參數(shù),response將會(huì)是parse方法的唯一的一個(gè)參數(shù), 這個(gè)方法負(fù)責(zé)解析返回的數(shù)據(jù)、匹配抓取的數(shù)據(jù)(解析為item)并跟蹤更多的URL。from scrapy.spider import BaseSpider
class DmozSpider(BaseSpider): name = “dmoz”
allowed_domains = [“dmoz.org”] start_urls = [ “http://#topics-selectors 這是一些XPath表達(dá)式的例子和他們的含義
? ? ? ? /html/head/title: 選擇HTML文檔
元素下面的//div[@class=”mine“]: 選擇所有包含 class=”mine“ 屬性的div 標(biāo)簽元素
這只是幾個(gè)使用XPath的簡(jiǎn)單例子,但是實(shí)際上XPath非常強(qiáng)大。
為了方便使用XPaths,Scrapy提供XPathSelector 類(lèi),有兩種口味可以選擇,HtmlXPathSelector(HTML數(shù)據(jù)解析)和XmlXPathSelector(XML數(shù)據(jù)解析)。為了使用他們你必須通過(guò)一個(gè) Response 對(duì)象
對(duì)他們進(jìn)行實(shí)例化操作。你會(huì)發(fā)現(xiàn)Selector對(duì)象展示了文檔的節(jié)點(diǎn)結(jié)構(gòu)。因此,第一個(gè)實(shí)例化的selector必與根節(jié)點(diǎn)或者是整個(gè)目錄有關(guān)。Selectors 有三種方法
? ? ? path():返回selectors列表, 每一個(gè)select表示一個(gè)xpath參數(shù)表達(dá)式選擇的節(jié)點(diǎn).extract():返回一個(gè)unicode字符串,該字符串為XPath選擇器返回的數(shù)據(jù) re():返回unicode字符串列表,字符串作為參數(shù)由正則表達(dá)式提取出來(lái)
現(xiàn)在我們嘗試從網(wǎng)頁(yè)中提取數(shù)據(jù)
from scrapy.spider import BaseSpider from scrapy.selector import HtmlXPathSelector
class DmozSpider(BaseSpider): name = ”dmoz“
allowed_domains = [”dmoz.org“] start_urls = [ ”http://XPathSelector(response)sites = hxs.path('//fieldset/ul/li')#sites = hxs.path('//ul/li')for site in sites: title = site.path('a/text()').extract()link = site.path('a/@href').extract()desc = site.path('text()').extract()#print title, link, desc print title, link
保存抓取的數(shù)據(jù)
保存信息的最簡(jiǎn)單的方法是通過(guò)以下命令來(lái)保存數(shù)據(jù): scrapy crawl dmoz-o items.json-t json 簡(jiǎn)單的使用就介紹這了,后面會(huì)繼續(xù)為大家說(shuō)明高級(jí)用法。
第五篇:黑馬程序員C語(yǔ)言教程:C++語(yǔ)言78個(gè)常見(jiàn)編譯錯(cuò)誤及分析
C語(yǔ)言常見(jiàn)編譯錯(cuò)誤及分析大全 fatal error C1003: error count exceeds number;stopping compilation
中文對(duì)照:(編譯錯(cuò)誤)錯(cuò)誤太多,停止編譯 分析:修改之前的錯(cuò)誤,再次編譯 fatal error C1004: unexpected end of file found
中文對(duì)照:(編譯錯(cuò)誤)文件未結(jié)束
分析:一個(gè)函數(shù)或者一個(gè)結(jié)構(gòu)定義缺少“}”、或者在一個(gè)函數(shù)調(diào)用或表達(dá)式中括號(hào)沒(méi)有配對(duì)出現(xiàn)、或者注釋符“/*?*/”不完整等 fatal error C1083: Cannot open include file: 'xxx': No such file or directory
中文對(duì)照:(編譯錯(cuò)誤)無(wú)法打開(kāi)頭文件xxx:沒(méi)有這個(gè)文件或路徑 分析:頭文件不存在、或者頭文件拼寫(xiě)錯(cuò)誤、或者文件為只讀 fatal error C1903: unable to recover from previous error(s);stopping compilation
中文對(duì)照:(編譯錯(cuò)誤)無(wú)法從之前的錯(cuò)誤中恢復(fù),停止編譯 分析:引起錯(cuò)誤的原因很多,建議先修改之前的錯(cuò)誤 error C2001: newline in constant
中文對(duì)照:(編譯錯(cuò)誤)常量中創(chuàng)建新行 分析:字符串常量多行書(shū)寫(xiě) error C2006: #include expected a filename, found 'identifier'
中文對(duì)照:(編譯錯(cuò)誤)#include命令中需要文件名
分析:一般是頭文件未用一對(duì)雙引號(hào)或尖括號(hào)括起來(lái),例如“#include stdio.h” error C2007: #define syntax
中文對(duì)照:(編譯錯(cuò)誤)#define語(yǔ)法錯(cuò)誤
分析:例如“#define”后缺少宏名,例如“#define” error C2008: 'xxx' : unexpected in macro definition
中文對(duì)照:(編譯錯(cuò)誤)宏定義時(shí)出現(xiàn)了意外的xxx
分析:宏定義時(shí)宏名與替換串之間應(yīng)有空格,例如“#define TRUE“1”” error C2009: reuse of macro formal 'identifier'
中文對(duì)照:(編譯錯(cuò)誤)帶參宏的形式參數(shù)重復(fù)使用
分析:宏定義如有參數(shù)不能重名,例如“#define s(a,a)(a*a)”中參數(shù)a重復(fù) error C2010: 'character' : unexpected in macro formal parameter list
中文對(duì)照:(編譯錯(cuò)誤)帶參宏的形式參數(shù)表中出現(xiàn)未知字符 分析:例如“#define s(r|)r*r”中參數(shù)多了一個(gè)字符‘|’ error C2014: preprocessor command must start as first nonwhite space
中文對(duì)照:(編譯錯(cuò)誤)預(yù)處理命令前面只允許空格
分析:每一條預(yù)處理命令都應(yīng)獨(dú)占一行,不應(yīng)出現(xiàn)其他非空格字符 error C2015: too many characters in constant 中文對(duì)照:(編譯錯(cuò)誤)常量中包含多個(gè)字符 分析:字符型常量的單引號(hào)中只能有一個(gè)字符,或是以“”開(kāi)始的一個(gè)轉(zhuǎn)義字符,例如“char error = 'error';” error C2017: illegal escape sequence 中文對(duì)照:(編譯錯(cuò)誤)轉(zhuǎn)義字符非法
分析:一般是轉(zhuǎn)義字符位于 ' ' 或 “ ” 之外,例如“char error = ' 'n;” error C2018: unknown character '0xhh' 中文對(duì)照:(編譯錯(cuò)誤)未知的字符0xhh 分析:一般是輸入了中文標(biāo)點(diǎn)符號(hào),例如“char error = 'E';”中“;”為中文標(biāo)點(diǎn)符號(hào) error C2019: expected preprocessor directive, found 'character' 中文對(duì)照:(編譯錯(cuò)誤)期待預(yù)處理命令,但有無(wú)效字符
分析:一般是預(yù)處理命令的#號(hào)后誤輸入其他無(wú)效字符,例如“#!define TRUE 1” error C2021: expected exponent value, not 'character' 中文對(duì)照:(編譯錯(cuò)誤)期待指數(shù)值,不能是字符
分析:一般是浮點(diǎn)數(shù)的指數(shù)表示形式有誤,例如123.456E error C2039: 'identifier1' : is not a member of 'identifier2' 中文對(duì)照:(編譯錯(cuò)誤)標(biāo)識(shí)符1不是標(biāo)識(shí)符2的成員 分析:程序錯(cuò)誤地調(diào)用或引用結(jié)構(gòu)體、共用體、類(lèi)的成員 error C2041: illegal digit 'x' for base 'n' 中文對(duì)照:(編譯錯(cuò)誤)對(duì)于n進(jìn)制來(lái)說(shuō)數(shù)字x非法
分析:一般是八進(jìn)制或十六進(jìn)制數(shù)表示錯(cuò)誤,例如“int i = 081;”語(yǔ)句中數(shù)字‘8’不是八進(jìn)制的基數(shù) error C2048: more than one default 中文對(duì)照:(編譯錯(cuò)誤)default語(yǔ)句多于一個(gè)
分析:switch語(yǔ)句中只能有一個(gè)default,刪去多余的default
error C2050: switch expression not integral 中文對(duì)照:(編譯錯(cuò)誤)switch表達(dá)式不是整型的
分析:switch表達(dá)式必須是整型(或字符型),例如“switch(“a”)”中表達(dá)式為字符串,這是非法的 error C2051: case expression not constant 中文對(duì)照:(編譯錯(cuò)誤)case表達(dá)式不是常量
分析:case表達(dá)式應(yīng)為常量表達(dá)式,例如“case “a””中““a””為字符串,這是非法的 error C2052: 'type' : illegal type for case expression 中文對(duì)照:(編譯錯(cuò)誤)case表達(dá)式類(lèi)型非法
分析:case表達(dá)式必須是一個(gè)整型常量(包括字符型)error C2057: expected constant expression 中文對(duì)照:(編譯錯(cuò)誤)期待常量表達(dá)式
分析:一般是定義數(shù)組時(shí)數(shù)組長(zhǎng)度為變量,例如“int n=10;int a[n];”中n為變量,這是非法的 error C2058: constant expression is not integral 中文對(duì)照:(編譯錯(cuò)誤)常量表達(dá)式不是整數(shù) 分析:一般是定義數(shù)組時(shí)數(shù)組長(zhǎng)度不是整型常量 error C2059: syntax error : 'xxx' 中文對(duì)照:(編譯錯(cuò)誤)‘xxx’語(yǔ)法錯(cuò)誤
分析:引起錯(cuò)誤的原因很多,可能多加或少加了符號(hào)xxx error C2064: term does not evaluate to a function 中文對(duì)照:(編譯錯(cuò)誤)無(wú)法識(shí)別函數(shù)語(yǔ)言
分析:
1、函數(shù)參數(shù)有誤,表達(dá)式可能不正確,例如“sqrt(s(s-a)(s-b)(s-c));”中表達(dá)式不正確
2、變量與函數(shù)重名或該標(biāo)識(shí)符不是函數(shù),例如“int i,j;j=i();”中i不是函數(shù) error C2065: 'xxx' : undeclared identifier 中文對(duì)照:(編譯錯(cuò)誤)未定義的標(biāo)識(shí)符xxx 分析:
1、如果xxx為cout、cin、scanf、printf、sqrt等,則程序中包含頭文件有誤
2、未定義變量、數(shù)組、函數(shù)原型等,注意拼寫(xiě)錯(cuò)誤或區(qū)分大小寫(xiě)。error C2078: too many initializers 中文對(duì)照:(編譯錯(cuò)誤)初始值過(guò)多
分析:一般是數(shù)組初始化時(shí)初始值的個(gè)數(shù)大于數(shù)組長(zhǎng)度,例如“int b[2]={1,2,3};” error C2082: redefinition of formal parameter 'xxx' 中文對(duì)照:(編譯錯(cuò)誤)重復(fù)定義形式參數(shù)xxx 分析:函數(shù)首部中的形式參數(shù)不能在函數(shù)體中再次被定義 error C2084: function 'xxx' already has a body 中文對(duì)照:(編譯錯(cuò)誤)已定義函數(shù)xxx 分析:在VC++早期版本中函數(shù)不能重名,6.0版本中支持函數(shù)的重載,函數(shù)名可以相同但參數(shù)不一樣
error C2086: 'xxx' : redefinition 中文對(duì)照:(編譯錯(cuò)誤)標(biāo)識(shí)符xxx重定義 分析:變量名、數(shù)組名重名
error C2087: '
分析:一般是定義二維數(shù)組時(shí)未指定第二維的長(zhǎng)度,例如“int a[3][];”
error C2100: illegal indirection
中文對(duì)照:(編譯錯(cuò)誤)非法的間接訪(fǎng)問(wèn)運(yùn)算符“*” 分析:對(duì)非指針變量使用“*”運(yùn)算
error C2105: 'operator' needs l-value 中文對(duì)照:(編譯錯(cuò)誤)操作符需要左值
分析:例如“(a+b)++;”語(yǔ)句,“++”運(yùn)算符無(wú)效
error C2106: 'operator': left operand must be l-value 中文對(duì)照:(編譯錯(cuò)誤)操作符的左操作數(shù)必須是左值 分析:
例如“a+b=1;”語(yǔ)句,“=”運(yùn)算符左值必須為變量,不能是表達(dá)式
error C2110: cannot add two pointers 中文對(duì)照:(編譯錯(cuò)誤)兩個(gè)指針量不能相加
分析:例如“int *pa,*pb,*a;a = pa + pb;”中兩個(gè)指針變量不能進(jìn)行“+”運(yùn)算
error C2117: 'xxx' : array bounds overflow 中文對(duì)照:(編譯錯(cuò)誤)數(shù)組xxx邊界溢出
分析:一般是字符數(shù)組初始化時(shí)字符串長(zhǎng)度大于字符數(shù)組長(zhǎng)度,例如“char str[4] = “abcd”;”
error C2118: negative subscript or subscript is too large 中文對(duì)照:(編譯錯(cuò)誤)下標(biāo)為負(fù)或下標(biāo)太大
分析:一般是定義數(shù)組或引用數(shù)組元素時(shí)下標(biāo)不正確 error C2124: divide or mod by zero 中文對(duì)照:(編譯錯(cuò)誤)被零除或?qū)?求余 分析:例如“int i = 1 / 0;”除數(shù)為0
error C2133: 'xxx' : unknown size 中文對(duì)照:(編譯錯(cuò)誤)數(shù)組xxx長(zhǎng)度未知
分析:一般是定義數(shù)組時(shí)未初始化也未指定數(shù)組長(zhǎng)度,例如“int a[];”
error C2137: empty character constant。中文對(duì)照:(編譯錯(cuò)誤)字符型常量為空 分析:一對(duì)單引號(hào)“''”中不能沒(méi)有任何字符
error C2143: syntax error : missing 'token1' before 'token2'
error C2146: syntax 4error : missing 'token1' before identifier 'identifier' 中文對(duì)照:(編譯錯(cuò)誤)在標(biāo)識(shí)符或語(yǔ)言符號(hào)2前漏寫(xiě)語(yǔ)言符號(hào)1 分析:可能缺少“{”、“)”或“;”等語(yǔ)言符號(hào)
error C2144: syntax error : missing ')' before type 'xxx' 中文對(duì)照:(編譯錯(cuò)誤)在xxx類(lèi)型前缺少‘)’ 分析:一般是函數(shù)調(diào)用時(shí)定義了實(shí)參的類(lèi)型
error C2181: illegal else without matching if 中文對(duì)照:(編譯錯(cuò)誤)非法的沒(méi)有與if相匹配的else 分析:可能多加了“;”或復(fù)合語(yǔ)句沒(méi)有使用“{}”
error C2196: case value '0' already used 中文對(duì)照:(編譯錯(cuò)誤)case值0已使用 分析:case后常量表達(dá)式的值不能重復(fù)出現(xiàn)
error C2296: '%' : illegal, left operand has type 'float' 47 error C2297: '%' : illegal, right operand has type 'float' 中文對(duì)照:(編譯錯(cuò)誤)%運(yùn)算的左(右)操作數(shù)類(lèi)型為float,這是非法的
分析:求余運(yùn)算的對(duì)象必須均為int類(lèi)型,應(yīng)正確定義變量類(lèi)型或使用強(qiáng)制類(lèi)型轉(zhuǎn)換
error C2371: 'xxx' : redefinition;different basic types 中文對(duì)照:(編譯錯(cuò)誤)標(biāo)識(shí)符xxx重定義;基類(lèi)型不同 分析:定義變量、數(shù)組等時(shí)重名
error C2440: '=' : cannot convert from 'char [2]' to 'char' 中文對(duì)照:(編譯錯(cuò)誤)賦值運(yùn)算,無(wú)法從字符數(shù)組轉(zhuǎn)換為字符
分析:不能用字符串或字符數(shù)組對(duì)字符型數(shù)據(jù)賦值,更一般的情況,類(lèi)型無(wú)法轉(zhuǎn)換
error C2447: missing function header(old-style formal list?)51 error C2448: '
error C2450: switch expression of type 'xxx' is illegal 中文對(duì)照:(編譯錯(cuò)誤)switch表達(dá)式為非法的xxx類(lèi)型
分析:switch表達(dá)式類(lèi)型應(yīng)為int或char
error C2466: cannot allocate an array of constant size 0 中文對(duì)照:(編譯錯(cuò)誤)不能分配長(zhǎng)度為0的數(shù)組 分析:一般是定義數(shù)組時(shí)數(shù)組長(zhǎng)度為0
error C2601: 'xxx' : local function definitions are illegal 中文對(duì)照:(編譯錯(cuò)誤)函數(shù)xxx定義非法
分析:一般是在一個(gè)函數(shù)的函數(shù)體中定義另一個(gè)函數(shù)
error C2632: 'type1' followed by 'type2' is illegal 中文對(duì)照:(編譯錯(cuò)誤)類(lèi)型1后緊接著類(lèi)型2,這是非法的 分析:例如“int float i;”語(yǔ)句
error C2660: 'xxx' : function does not take n parameters 中文對(duì)照:(編譯錯(cuò)誤)函數(shù)xxx不能帶n個(gè)參數(shù) 分析:調(diào)用函數(shù)時(shí)實(shí)參個(gè)數(shù)不對(duì),例如“sin(x,y);”
error C2664: 'xxx' : cannot convert parameter n from 'type1' to 'type2' 中文對(duì)照:(編譯錯(cuò)誤)函數(shù)xxx不能將第n個(gè)參數(shù)從類(lèi)型1轉(zhuǎn)換為類(lèi)型2 分析:一般是函數(shù)調(diào)用時(shí)實(shí)參與形參類(lèi)型不一致
error C2676: binary '<<' : 'class istream_withassign' does not define this operator or a conversion to a type acceptable to the predefined operator error C2676: binary '>>' : 'class ostream_withassign' does not define this operator or a conversion to a type acceptable to the predefined operator 分析:“>>”、“<<”運(yùn)算符使用錯(cuò)誤,例如“cin<
error C4716: 'xxx' : must return a value 中文對(duì)照:(編譯錯(cuò)誤)函數(shù)xxx必須返回一個(gè)值
分析:僅當(dāng)函數(shù)類(lèi)型為void時(shí),才能使用沒(méi)有返回值的返回命令。
fatal error LNK1104: cannot open file “Debug/Cpp1.exe” 中文對(duì)照:(鏈接錯(cuò)誤)無(wú)法打開(kāi)文件Debug/Cpp1.exe 分析:重新編譯鏈接
fatal error LNK1168: cannot open Debug/Cpp1.exe for writing 中文對(duì)照:(鏈接錯(cuò)誤)不能打開(kāi)Debug/Cpp1.exe文件,以改寫(xiě)內(nèi)容。分析:一般是Cpp1.exe還在運(yùn)行,未關(guān)閉
fatal error LNK1169: one or more multiply defined symbols found 中文對(duì)照:(鏈接錯(cuò)誤)出現(xiàn)一個(gè)或更多的多重定義符號(hào)。分析:一般與error LNK2005一同出現(xiàn)
error LNK2001: unresolved external symbol _main 中文對(duì)照:(鏈接錯(cuò)誤)未處理的外部標(biāo)識(shí)main 分析:一般是main拼寫(xiě)錯(cuò)誤,例如“void mian()”
error LNK2005: _main already defined in Cpp1.obj 中文對(duì)照:(鏈接錯(cuò)誤)main函數(shù)已經(jīng)在Cpp1.obj文件中定義 分析:未關(guān)閉上一程序的工作空間,導(dǎo)致出現(xiàn)多個(gè)main函數(shù)
warning C4003: not enough actual parameters for macro 'xxx' 中文對(duì)照:(編譯警告)宏xxx沒(méi)有足夠的實(shí)參 分析:一般是帶參宏展開(kāi)時(shí)未傳入?yún)?shù)
warning C4067: unexpected tokens following preprocessor directive期待新行 分析:“#include
warning C4091: '' : ignored on left of 'type' when no variable is declared 中文對(duì)照:(編譯警告)當(dāng)沒(méi)有聲明變量時(shí)忽略類(lèi)型說(shuō)明 分析:語(yǔ)句“int;”未定義任何變量,不影響程序執(zhí)行
warning C4101: 'xxx' : unreferenced local variable 中文對(duì)照:(編譯警告)變量xxx定義了但未使用 分析:可去掉該變量的定義,不影響程序執(zhí)行
warning C4244: '=' : conversion from 'type1' to 'type2', possible loss of data 中文對(duì)照:(編譯警告)賦值運(yùn)算,從數(shù)據(jù)類(lèi)型1轉(zhuǎn)換為數(shù)據(jù)類(lèi)型2,可能丟失數(shù)據(jù)
分析:需正確定義變量類(lèi)型,數(shù)據(jù)類(lèi)型1為float或double、數(shù)據(jù)類(lèi)型2為int時(shí),結(jié)果有可能不正確,數(shù)據(jù)類(lèi)型1為double、數(shù)據(jù)類(lèi)型2為float時(shí),不影響程序結(jié)果,可忽略該警告
warning C4305: 'initializing' : truncation from 'const double' to 'float' 中文對(duì)照:(編譯警告)初始化,截取雙精度常量為float類(lèi)型 分析:出現(xiàn)在對(duì)float類(lèi)型變量賦值時(shí),一般不影響最終結(jié)果
warning C4390: ';' : empty controlled statement found;is this the intent? 中文對(duì)照:(編譯警告)‘;’控制語(yǔ)句為空語(yǔ)句,是程序的意圖嗎?
分析:if語(yǔ)句的分支或循環(huán)控制語(yǔ)句的循環(huán)體為空語(yǔ)句,一般是多加了“;”
warning C4508: 'xxx' : function should return a value;'void' return type assumed 中文對(duì)照:(編譯警告)函數(shù)xxx應(yīng)有返回值,假定返回類(lèi)型為void 分析:一般是未定義main函數(shù)的類(lèi)型為void,不影響程序執(zhí)行 c語(yǔ)言的錯(cuò)誤對(duì)照表———— 在遇到錯(cuò)誤時(shí)可以對(duì)照查看
warning C4552: 'operator' : operator has no effect;expected operator with side-effect 中文對(duì)照:(編譯警告)運(yùn)算符無(wú)效果;期待副作用的操作符 分析:例如“i+j;”語(yǔ)句,“+”運(yùn)算無(wú)意義
warning C4553: '==' : operator has no effect;did you intend '='? 中文對(duì)照:(編譯警告)“==”運(yùn)算符無(wú)效;是否為“=”? 分析:例如 “i==j;” 語(yǔ)句,“==”運(yùn)算無(wú)意義
warning C4700: local variable 'xxx' used without having been initialized 中文對(duì)照:(編譯警告)變量xxx在使用前未初始化
分析:變量未賦值,結(jié)果有可能不正確,如果變量通過(guò)scanf函數(shù)賦值,則有可能漏寫(xiě)“&”運(yùn)算符,或變量通過(guò)cin賦值,語(yǔ)句有誤
warning C4715: 'xxx' : not all control paths return a value 中文對(duì)照:(編譯警告)函數(shù)xxx不是所有的控制路徑都有返回值
分析:一般是在函數(shù)的if語(yǔ)句中包含return語(yǔ)句,當(dāng)if語(yǔ)句的條件不成立時(shí)沒(méi)有返回值
warning C4723: potential divide by 0 中文對(duì)照:(編譯警告)有可能被0除 分析:表達(dá)式值為0時(shí)不能作為除數(shù)
warning C4804: '<' : unsafe use of type 'bool' in operation 中文對(duì)照:(編譯警告)‘<’:不安全的布爾類(lèi)型的使用 分析:例如關(guān)系表達(dá)式“0<=x<10”有可能引起邏輯錯(cuò)誤


文檔為doc格式
聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶(hù)自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。