#include <stdio.h> int main(int argc, char** argv) { int c=getchar(); while(c!='q') { if (c=='\r') printf("_CR_"); else if (c=='\n') printf("_LF_"); else printf("%c", c); c=getchar(); } return 0; }
gcc -o test.exe test.cpp
在windows Console裏執行,結果以下:面試
運行環境是windows 10 Pro.算法
能夠看到,鍵盤鍵入的每一個可見字符都會在console即stdout裏回顯.shell
重複一下就是:getchar()永遠是從stdin流裏讀取一個字符便終止,若是stdin流是空的,則等待用戶鍵入字符到流裏,但只有當用戶按下Enter鍵時,該函數纔會從等待狀態返回,返回流裏的第一個字符,而後結束,(用戶鍵入Enter產生的字符也是stdin流裏的字符); 若是stdin流不是空的,則getchar()不會處於等待狀態,而是直接返回流裏的第一個字符,而後結束。也能夠看到,Windows的Console裏,按下Enter鍵,getchar()識別爲一個Line Feed即'\n'(換行)字符。再多餘強調一下剛纔看到的,在getchar()的等待狀態中,用戶鍵入的字符是回顯在Console上的。windows
getchar()函數屬於C語言標準庫函數,包含<stdio.h>便可。函數
/***********************************************************/url
#include <stdio.h> #include <conio.h> int main(int argc, char** argv) { int c=getch(); while(c!='q') { printf("zbjxb"); if (c=='\r') printf("_CR_"); else if (c=='\n') printf("_LF_"); else printf("%c", c); c=getch(); } return 0; }
這段代碼和第一段的區別是:把getchar()調用都換成了getch()調用。包含了<conio.h>文件。循環體裏第一句是新增的printf語句。代碼編譯後,執行exe文件,輸出以下:spa
能夠看到,用戶的鍵入不會回顯到Console裏,getch()在stdin流爲空時處於等待狀態,當用戶鍵入任意字符時,即從等待狀態返回,返回用戶鍵入的這個字符,並且用戶鍵入的Enter鍵,getch()識別爲Car Return即'\r'(回車)字符。getch()不是C語言標準庫函數。而是來自平臺相關的<conio.h>文件。code
===================================================get
《編程之法 - 面試和算法心得》裏1.1的觸類旁通題,逐單詞旋轉一個句子,解法以下:
#include <stdio.h> #include <ctype.h> void reverse_string(char* s, int from, int to) { while (from < to) { char c=s[from]; s[from++]=s[to]; s[to--]=c; } } void parseSentence(char* str, int index) { int start, end; for (int i=0;i<index;i++) { if (isspace(str[i])) { continue; } start = i; for (i++;i<index;i++) { if (isspace(str[i])) { break; } } end=i-1; reverse_string(str, start, end); } reverse_string(str, 0, index-1); } int main(int argc, char** argv) { int index=0; char str[128]={0}; char ch=getchar(); while (ch != EOF) { if (ch=='\n') { parseSentence(str, index); str[index]=0; printf(str); printf("\n"); index=0; } else { str[index++]=ch; } ch=getchar(); } return 0; }