2015-01-21 89 views
-2

我想了解一下下面的代碼的getchar()邏輯...的getchar()函數邏輯

printf("Type up to 25 characters and then press Enter. . . \n") ; 
for (i = 0; i < 25; i++) 
{ 
    msg[ i] = getchar() ; 
    if (msg[ i] == ' \n') 
    { 
      i--; 
      break; 
    } 
} 
putchar(' \n') ; 
for (; i >= 0; i--) 
{ 
    putchar(msg[ i]) ; 
} 

在上面的代碼,如果我輸入一個名字,說「STACKEXCHANGE 「,然後按下回車鍵,將顯示單詞properly..but下面的代碼的工作方式不同..

printf("What are your two initials?\n") ; 
firstInit = getchar() ; 
lastInit = getchar() ; 

在這個例子中,如果i型‘ST’,然後按下回車鍵,‘S’將被存儲在firstinit,而「\ n」將存儲在lastInit而不是'T'中。

這是怎麼發生的?不是'T'輸入到緩衝區的第二個字符。 Infact \ n是緩衝區中的第三個字符。所以爲什麼要存儲。如果iam錯誤,糾正我,但是當按下或輸入時釋放緩衝區,那麼爲什麼它會再次存儲在下一個getchar()函數中。

爲什麼第一個代碼執行不同呢?我的意思是如果我輸入「stackexchange」並按回車鍵「t」作爲第二個字符存儲,但在第二個例子中,如果輸入相同的「st」並輸入「enter」,則「t」是不存儲爲第二個輸入,而是將「輸入」作爲第二個輸入。

我很抱歉,如果我的打字是混亂...基本上,我想知道在這兩個代碼的邏輯流程,它是如何發生的幕後..

+5

「在這個例子中,如果我輸入「ST」然後回車,'S'將被存儲在杉木中stinit,而「\ n」將存儲在lastInit而不是'T'中。「 - 這是不正確的。嘗試一下。 – 2015-01-21 08:42:11

+0

@Reeza - 你真的在你的第二個例子中輸入「ST」嗎? – Sadique 2015-01-21 08:45:41

+0

嗯..我真的很困惑現在..實際上我解除了這兩個例子從交流文本書...可以解釋如何getchar()邏輯工作 – ReezaHendricks 2015-01-21 08:47:51

回答

0

存儲\ n中的唯一原因是,當你按下Enter鍵進入S並且不衝出回車,所以它會在您的第二個字符串中存儲\n

firstInit = getchar() ; 

將讀取和將S

lastInit = getchar() ; 

將讀取和存儲回車

的getchar()是一個標準的庫函數,其將讀取從控制檯的字符。

+0

k..thanks夥計.. – ReezaHendricks 2015-01-21 10:39:29

0

檢查下面的代碼,它將您的輸入ST並存儲在2個字符的a和b中。

int main(void){ 
char a; 
char b; 

a = getchar(); 
b= getchar(); 

printf("a = %c b = %c\n",a,b); 
return 0; 
} 

輸入

ST<enter> 

輸出

a = S b = T 

如果你看到一個換行字符被保存到b這裏,那麼輸入就像S<enter>ST<enter>

+0

k..thanks夥計.. – ReezaHendricks 2015-01-21 10:39:09

+0

@ReezaHendricks你的問題已修復?你必須知道gethchar是如何工作的? – Gopi 2015-01-21 10:40:53