我想了解以下代码中的 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”,然后按 Enter 键,它将正确显示该单词..但下面的代码工作方式不同..
printf("What are your two initials?\n") ;
firstInit = getchar() ;
lastInit = getchar() ;
在这个例子中,如果我输入“ST”然后按回车键,“S”将存储在firstinit中,而“\n”将存储在lastInit中而不是“T”中。
这是怎么发生的? 'T' 不是输入到缓冲区的第二个字符吗?事实上\n 是缓冲区中的第三个字符。那么为什么\n 被存储。如果我错了,请纠正我,但是当按下或输入\n 时缓冲区会被释放,那么为什么它再次被存储在下一个 getchar() 函数中。
为什么第一段代码的执行方式不同?我的意思是,如果我输入“stackexchange”并按回车键,“t”将被存储为所需的第二个字符,但在第二个示例中,如果输入相同的“st”并输入“enter”,则“t”是不存储为第二个输入,而是将“enter”作为第二个输入。
如果我的打字令人困惑,我很抱歉......基本上我想知道两个代码中的逻辑流程,它是如何在幕后发生的......
最佳答案
存储\n 的唯一原因是当您输入 S 时按 Enter 键而不清除回车符,因此它将在第二个字符串中存储 \n
。
firstInit = getchar() ;
将读取并存储S
lastInit = getchar() ;
将读取并存储回车符
getchar() 是一个标准库函数,它将从控制台读取字符。
关于c - Getchar()函数逻辑如下代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28062785/