搬運自己2016年11月28日發布於SegmentFault的文章。鏈接:https://segmentfault.com/a/1190000007626460
本勘誤由本人整理並發布,僅針對下方列出的書籍印次。由於本人水平有限,不保證勘誤正確性以及包含書中全部錯誤,故本勘誤僅供參考,更新進度由本人閱讀進度來決定。如有錯誤,請留言指出;如有補充,請至本書出版社圖書頁面尾部自行提交勘誤。
書籍信息
書名: C Primer Plus(第6版)中文版
出版社: 人民郵電出版社
譯者: 姜佑
印次:2016年10月北京第5次印刷
ISBN: 9787115390592
出版社圖書頁面鏈接:http://www.epubit.com.cn/book/details/1848
頁碼:83 • 行數:表4.4,修飾符【L】一行(倒數第三行),第二列,單元格內容第二行
英文版原文:Examples: "%Lf"
and "%10.4Le"
中文版譯文:示例:"%Ld"
、"%10.4Le"
錯誤地把f
錄入為d
頁碼:87 • 行數:【4.4.4 轉換說明的意義】下面第二段文字第一行
轉換(Conversion)可能會誤導讀者認為原始值被轉替換成轉換后的值
英文原文:The term conversion is probably somewhat misleading because it might suggest that the original value is replaced with a converted value.
英文be replaced with原意為“被替換”,中文版為“被轉替換”,應該是在錄入的時候多打了一個“轉”字
頁碼:94 • 行數:表4.7續表,轉換說明【j】一行(表格第3行第2列)
示例"%zd"
、"%zo"
然而原版提供的示例應為"%jd"
"%ju"
"%zd"
、"%zo"
為轉換說明【z】一行的示例,中文版書中直接給去掉了,估計是把z
的示例當成了j
的,而z
本身的示例又沒有打上
頁碼:95 • 行數:26
英文版原文:For example, if %c
is preceded by a space in the format string, scanf()
does skip to the first non-whitespace character.
中文版譯文:例如,如果把%c
放在格式字符串中的空格前面,scanf()
便會跳過空格,從第1個非空白字符開始讀取。
翻譯錯誤。be preceded by意味【以……為先導,前面是……】,所以說,正確的含義應為:%c
以一個空格為先導(%c
的前面是一個空格)
翻譯正好選擇了相反的意思,並且這句話的邏輯也很奇怪
正確譯文:如果在格式字符串中把空格放到%c的前面
頁碼:100 • 行數:4.8編程練習第2題
編寫一個程序,提示用戶輸入名和姓,並執行一下操作:
英文原文:Write a program that requests your first name and does the following with it:
英文中只要求輸入名,未要求輸入姓
本題選項中也存在相同的翻譯錯誤。
並且,中文存在錄入錯誤,將“以下”輸入成了“一下”
頁碼:100 • 行數:4.8編程練習第3題
第3題中,題目要求“用下面的格式進行輸出”
a.輸入21.3 或 2.1e+001
b.輸入+21.290或2.129E+001
英文原文:
Have the output use the following formats
a.The input is 21.3 or 2.1e+001.
b.The input is +21.290 or 2.129E+001.
程序的要求是在屏幕上顯示出形如The input is 21.3 or 2.1e+001.
的輸出,譯者將格式要求直接翻譯了
頁碼:118 • 行數:5.3.5優先級第2行
因此,x*y++
表示的是(x)*(y++)
,而不是(x+y)++
錄入錯誤,修改為:
因此,x*y++
表示的是(x)*(y++)
,而不是(x*y)++
頁碼:125 • 行數:2
unsignedlong long,缺少一個空格,應為unsigned long long
頁碼:129 • 行數:程序清單5.16第4行注釋
const int S_PER_H = 3600 //一小時的分鍾數
應為一小時的秒數
頁碼:143 • 行數:第2段最后一行
具有歧義的譯文:例如,假設你想跳過輸入到第一個非空白字符或數字,可以這樣寫
英文原文:
For example, suppose you want to skip over input to the first character that isn’t whitespace or a digit. You can use a loop like this:
建議譯文:例如,假設你想跳過輸入到達第一個既不是空白字符也不是數字的位置,可以這樣寫
頁碼:161 • 行數:小結:do while語句-形式
do
statement
while (expression);
在test
為假或0之前,重復執行statement
部分
英文版這里是expression
,要么把括號里的expression
改成test
,要么把后面的test
改成expression
頁碼:170 • 行數:復習題第1題
后5行中使用的是第1行quack
的值
英文原文:
each of the final five statements uses the value of quack
produced by the preceding statement.
正確譯文:后5行中使用的是前一行生成的quack
值
頁碼:178 • 行數:28
if
語句指示計算機,如果剛讀取的值(remperature
)小於0,
錄入錯誤,應為temperature
頁碼:194 • 行數:最下面一段第一句
譯文:要查找一個單詞里是否有某個字符
英文原文:To keep track of whether a character is in a word
建議譯文:要追蹤一個字符是否在一個單詞中
頁碼:212 • 行數:復習題第4題
下列個表達式的值是多少?
錄入錯誤,個→各
頁碼:215 • 行數:7.12編程練習第2題
譯文:一行打印8個字符。
英文原文:Print eight character-code pairs per line.
譯者直接把題目的要求給篡改了。
建議譯文:每行打印8個“字符-ASCII碼”組合
頁碼:215 • 行數:7.12編程練習第7題
a.基本工資 = 1000美元/小時
英文原文:Basic pay rate = $10.00/hr
應改為:基本工資 = 10.00美元/小時
頁碼:222 • 行數:8.4重定向和文件 第2行
輸出設備(我們假定)是鍵盤
英文原文:
The input device (we have assumed) is a keyboard
修改“輸出”為“輸入”
頁碼:222 • 行數:8.4.1上面一段第一行
表意不明的譯文:
重定向的一個主要問題與操作系統有關,與C無關。
然而接下來並沒有說這個主要問題是什么。
英文原文:
One major problem with redirection is that it is associated with the operating system, not C.
建議譯文:
重定向的一個主要問題是它與操作系統有關,而與C無關。
頁碼:222 • 行數:8.4.1上面一段倒數第2行
在UNIX上運行蘋果OS X,可以用UNIX命令行模式啟動Terminal應用程序
英文原文:
Apple OS X runs on top of Unix, and you can use the Unix command-line mode by starting the Terminal application
譯者完全弄成了相反的意思。
正確譯文:
蘋果OS X運行在UNIX上,故可使用Terminal應用程序來使用UNIX命令行模式
參考鏈接:https://support.apple.com/kb/PH7073?locale=zh_CN&viewlocale=zh_CN