以下代码中的Getchar()函数逻辑

时间:2015-01-21 08:38:12

标签: c

我想知道以下代码中的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] ) ;
}

在上面的代码中,如果我输入一个名字,请说&#34; STACKEXCHANGE&#34;然后点击输入它将正确显示单词..但下面的代码工作方式不同..

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

在这个例子中,如果我输入&#34; ST&#34;然后点击进入,&#39; S&#39; S&#39;将存储在firstinit中,而&#34; \ n&#34;将存储在lastInit中而不是&#39; T&#39;。

这是怎么发生的?不是&#39; T&#39;第二个字符输入缓冲区。 Infact \ n是缓冲区中的第三个字符。那么为什么要存储呢?如果我错了,请纠正我,但是当按下或输入\ n时释放缓冲区,那么为什么它再次存储在下一个getchar()函数中。

为什么第一个代码的执行方式不同呢?我的意思是如果我输入&#34; stackexchange&#34;并点击进入&#34; t&#34;存储为所需的第二个字符,但在第二个例子中,如果相同的话,则存储在第二个字符中。输入&#34;输入&#39;是输入,&#34; t&#34;不存储为第二个输入,而是&#34;输入&#39;被视为第二个输入。

如果我的打字令人困惑,我很抱歉...基本上我想知道两个代码中的逻辑流程,它是如何在幕后发生的......

2 个答案:

答案 0 :(得分:0)

存储\ n的唯一原因是当你输入S时按下回车而没有清空回车符,所以它会将\n存储在你的第二个字符串中。

firstInit = getchar() ; 

将读取并存储S

lastInit = getchar() ;

将读取并存储回车

getchar()是一个标准的库函数,它将从控制台读取一个字符。

答案 1 :(得分: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

如果您在此处看到换行符char被保存到b,那么输入就像S<enter>而不是ST<enter>