2015-01-21 85 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