我想知道以下代码中的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;被视为第二个输入。
如果我的打字令人困惑,我很抱歉...基本上我想知道两个代码中的逻辑流程,它是如何在幕后发生的......
答案 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>