新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > getchar()使用時遇到的數(shù)據(jù)類型錯誤

getchar()使用時遇到的數(shù)據(jù)類型錯誤

作者: 時間:2016-11-28 來源:網(wǎng)絡(luò) 收藏
1.
在字母讀取操作中通常會使用到這條語句
while ((c = getchar() ) != EOF)
在做練習時,沒有注意括號的重要性,寫成
while (c = getchar() != EOF)
結(jié)果使得putchar(c)是亂碼。
分析:
返回的bool值雖然也是1沒錯,但是c取得的值卻是亂碼。鑒于語句里面只有兩個判斷符號
猜測是符號優(yōu)先級導(dǎo)致了亂碼?
推測c被賦予的值是int 1。但是作為char輸出時,是亂碼。不應(yīng)該當會當作ACSII碼來處理嗎?

還有就是沒有理解一次性調(diào)用的基本原理,就是設(shè)定一個進入條件,執(zhí)行時改變他:
if ((c == ) || (c == t) )
if (flag == 0)
{
...
flag = 1;
}
2.
char s[] = {123,456};//編譯錯誤!
char s[] = {1,4}; //通過編譯,輸出s內(nèi)容是亂碼??!
char 數(shù)組不能那樣存?
但是使用 c = getchar(); 之后,即是c存的是數(shù)字,但是也是char類型。
可以有 s [i] = c; ,同時輸出也是正確值(鍵盤輸入123,s元素也是123);

執(zhí)行時產(chǎn)生了Segmentation fault (core dumped)錯誤,由于數(shù)組操作為主,初定是數(shù)組越界導(dǎo)致。
沒錯就是數(shù)組越界造成的!對于數(shù)組s[10],實際范圍是s[0]~s[9]!千萬別往s[10]里面存東西,我就存了#!#!#!#!還好只是存了結(jié)束符