c getchar() 函式的使用注意 、換行符的處理
阿新 • • 發佈:2019-02-03
getchar() 是從控制檯接收字元,注意只會接收一個字元
char ch = getchar();
如果在控制檯輸入 qwer的時候, ch的值只接收 'q'
getchar() 在鍵盤輸入資訊時, 並不是在鍵盤上敲一個字元,該字元就立即送到計算機中,這些字元暫存在鍵盤的緩衝區中,只有按了Enter鍵才會把這些字元一起送到計算機中,
然後按照先後順序賦值給相應的變數。
例如
int main(){ char ch = getchar(); char aa = getchar(); printf("%c", ch); printf("%c", aa); return 0; }
接著看一下一個for迴圈的例項
#include <stdio.h> #include <stdlib.h> typedef char DataType; struct LinkNode { DataType data; struct LinkNode * next; }; int main() { struct LinkNode * head = NULL; // 指向單鏈表的頭指標 struct LinkNode * p; //定義指向結點的指標變數 char ch; while ((ch = getchar()) != '0') { printf("*%c-", ch); p = (struct LinkNode *) malloc(sizeof(struct LinkNode)); p->data = ch; p->next = head; //指向頭指標 head = p; //重置頭指標 } printf("\n%s\n", "開始遍歷"); struct LinkNode * node = head; while (node != NULL) { printf("-%c\n",node->data); node = node->next; } return 0; }
最開始的理解是,每次輸入一個字元 然後按回車,while就執行一次迴圈。但是我錯了
while ((ch = getchar()) != '0') {
printf("*%c-", ch);
p = (struct LinkNode *) malloc(sizeof(struct LinkNode));
p->data = ch;
p->next = head; //指向頭指標
head = p; //重置頭指標
}
------------------- 開始輸入--------------------
q w e 0 *q-* -*w-* -*e-* - 開始遍歷 - -e - -w - -q
---------------------------------------------------------------------------
本來以為只是輸入了三個字元。但是通過while迴圈
*q-*
-*w-*
-*e-*
-
發現回車符也輸入進去了。。。。。編譯的時候也能發現。回車符作為一個字元也輸入到連結串列裡了
正確的輸入方法如下( 0以後回車)
qwer0
*q-*w-*e-*r-
開始遍歷
-r
-e
-w
-q