1. 程式人生 > >c getchar() 函式的使用注意 、換行符的處理

c getchar() 函式的使用注意 、換行符的處理

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