一、什么時候用getchar()
1、除了%c的輸入而言:scanf輸入:abc[回車]后,遇到回車結束,但是回車還留在輸入流中。下一個scanf在輸入前碰到回車,會自動把回車拋棄,然后再輸入:efg,再碰到回車結束。所以加了getchar()時,它會吃掉一個回車。如果不加,在輸入前,它會自動刪除這個回車,所以結果是一樣的。重點是:空格、回車、跳格等結束符在輸入前碰到的話,會自動拋棄,輸入后碰到的話,就會認為結束。
2、針對%c的輸入而言:%c遇到空格、回車、跳格等結束符都是會讀取的。
例如:scanf("%c",&i);
scanf("%c",&j);
輸入a[回車]b的話,就會是:i = a; j = 回車;
但如果是:scanf("%c",&i);
getchar();
scanf("%c",&j);
輸入a[回車]b,會是:i = a; j = b;
所以一般用getchar()吃回車,都是用在%c 后面。
3、應用:輸入一個大寫字母,輸出對應的小寫字母。輸入數據的第一行為一個正整數T, 表示測試數據的組數。然后是T組測試數據。每組測試數據包含一個大寫字母C。
對於每組測試數據, 輸出它的小寫字母。
#include <stdio.h> int main() { int i,t; scanf("%d",&t); getchar(); char a; for(i=0;i<t;i++) { scanf("%c",&a); getchar(); printf("%c\n",a+32); } return 0; }
如果scanf("%d",&t);后不加getcahr();輸入:2 [回車],則 t = 2; a = 回車
如果scanf("%c",&a);后不加getcahr(),輸入:2 [回車] A [回車] B ,則 t = 2; a = A ,下一個循環 ,a = 回車,而不是 B。