2016-02-19 58 views
-2

我試圖在數組中使用單個字符,然後使用特定的語法打印該字符。這裏是我的代碼:將字符掃描到C中的數組中

int main(){ 
char in[18]; 
scanf("%c",in); 
printf("%c",in); 
return 0; 
} 

我知道如何把一個角色從用戶使用C &許多其他的方式做同樣的任務,但我很好奇,想知道爲什麼這段代碼打印在屏幕上什麼都沒有。這是我對這段代碼的解釋。如果錯了,請糾正我。

  1. 首先聲明18個字符的數組。
  2. 使用scanf,字符存儲在陣列的第一位置。(「中」指的是它的第一個元素的地址。)
  3. 然後,當我試圖打印字符,不打印輸出。
  4. 當我將「in」更改爲「in [0]」時,字符會在屏幕上打印。
  5. 我認爲「in」也指向第一個元素以及[0]。那麼爲什麼我會得到兩個不同的答案。 ?

在此先感謝!

+0

'**'衰變**爲'char *'。 'printf'需要一個'char'。那麼你認爲會發生什麼? 'in'本身就是一個數組,而不是指針! – Olaf

+0

我最近從Java切換到C。這就是爲什麼這個愚蠢的錯誤。感謝您澄清我的疑問。 – monsterspy

+1

我建議你仔細閱讀一本好C書。這些語言之間有很多不同的概念。 C並不妨礙你射擊你的腳。 – Olaf

回答

1

你的代碼調用未定義行爲,編譯器可能會被警告有關的"%c"符需要一個char嚴格地說,它預計的int參數轉換爲unsigned char後)參數的事實,但你通過了char *數組char)。

爲了使打印的字符使用

printf("%c", in[0]); 

兩個printf()scanf()傳遞錯誤的類型給定的格式說明是不確定的行爲。

2

in[0]不指向數組中的第一個元素。它數組中的第一個元素。

in具有類型char *(當傳遞給函數時),而in[0]具有類型char。並且%c格式說明符到printf預計char,而不是char *

+0

感謝您澄清我的疑問。 – monsterspy