關於C語言陣列的輸入與輸出

2021-08-13 09:30:20 字數 2299 閱讀 7499

先擺**:

#include#includeint main()

; //定義陣列,設定初值,這樣其餘為\0

scanf("%s", a); //第一種輸入方式

int i = 0; //第二種輸入方式

for (; i <= sizeof(a) - 1; i++)

printf("輸出陣列所佔位元組數:%d\n", sizeof(a)); //輸出陣列所佔位元組數

printf("字串實際長度:%d\n", strlen(a)); //輸出字串實際長度,不包括\0

printf("%s\n", a); //第一種輸出方式

int o = 0; //第二種輸出方式

for (; o <= sizeof(a) - 1; o++)

putchar(a[o]);

printf("\nend"); //作為結尾,便於觀測

sleep(60000);//暫停一分鐘,以便觀察結果

return 0;

}

test1.我們不設初值定義陣列,再選擇第一種輸入方式,輸入123,輸出結果為:

輸入1234567,再執行:

輸入12345678,再執行:

但一分鐘(即程式正常執行結束)後報錯.

分析:不設初值定義陣列,陣列內應該沒\0;第一種輸入方式系統會自動在使用者輸入的內容後加上\0.所以實際向陣列內賦了9個字元的值.所以報錯.

第二種輸出方式會將字元陣列中每乙個值都輸出,當輸入123時,陣列內為123\0????,所以會出現亂碼.

test2.我們不設初值定義陣列,再選擇第二種輸入方式,輸入123,輸出結果為:

輸入1234567,再執行:

輸入12345678,再執行:

程式結束後沒有報錯.

分析:不設初值定義陣列,陣列內應沒\0;第二種輸入方式是實打實的使用者輸入啥便賦予陣列啥.又因為strlen(a))輸出字串實際長度時在找\0,但陣列中沒\0,所以顯示錯誤的資料.同理第一種輸出方式在找\0沒找到,所以1234567[8]後出現亂碼.再說第二種輸出方式,第二種輸出方式會將字元陣列中每乙個值都輸出,當輸入123時,陣列內為123?????,所以會出現亂碼.第二種輸入方式不會多加\0,所以賦了8個值,不會報錯.

test3.我們定義陣列,設初值,再選擇第一種輸入方式,輸入123,輸出結果為:

輸入1234567,再執行:

輸入12345678,再執行:

然後程式報錯....

分析:定義陣列並設初值,陣列內未賦值部分會自動初始為\0;所以前兩個都沒問題.第一種輸入方式系統會自動在使用者輸入的內容後加上\0.所以實際向陣列內賦了9個字元的值.所以報錯.

test4.我們定義陣列,設初值,再選擇第二種輸入方式,輸入123,輸出結果為:

輸入1234567,再執行:

輸入12345678,再執行:

分析:定義陣列並設初值,陣列內未賦值部分會自動初始為\0;所以前兩個都沒問題.第二種輸入方式是實打實的使用者輸入啥便賦予陣列啥.又因為strlen(a))輸出字串實際長度時在找\0,但陣列中八個位置都被佔了,沒\0,所以顯示錯誤的資料,同理第一種輸出方式在找\0沒找到,所以12345678後出現亂碼.

C語言 輸入與輸出

標頭檔案包含 include 空指標也在這個標頭檔案中,int p null 讀取輸入的函式scanf 列印輸出的函式printf int scanf const char format,函式從標準輸入流 stdin 讀取輸入,並根據提供的 format 來瀏覽輸入。int printf const...

C語言的輸入與輸出

今天感覺過的有點迷,早上是電腦系統更新了一早上,下午是剛到了hdmi轉vga的資料線,一直想著嘗試,感覺今兒的學習狀態極差反正。今晚好好整理一波了,總歸是要收穫知識的。1.關於putchar 函式 int putchar int c 功能是向終端輸出乙個字元,而這個引數呢,可以是變數,字元常量,整數...

c語言字元的輸入與輸出

輸入字元 getchar 包含其的標頭檔案為 include 例子 判斷首字母輸出選擇的是星期幾,如果首字母重複,則再 輸入第二個字母 include stdio.h int judge char ju int s void int t void int main int argc,char con...