getchar()與getch()

#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

百度百科上的解釋http://baike.baidu.com/link?url=UOHxzikl2pVXfgFzeK3jLo2jKq8tG_lO7nExzW39kBNmN4M9tRuHCfHiW2QQ3RNBIMgrpf1iwospVBz5xS2ZpK
編程

重複一下就是: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;
}
相關文章
相關標籤/搜索