c - Getchar()函数逻辑如下代码

标签 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] ) ;
}

在上面的代码中,如果我输入一个名称,说“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/

相关文章:

c++ - 没有goto跳入和跳出循环的更好方法?

c - 多个 xterm 伪终端仅用作多个线程的输出

c - 关于 C 中字符串处理的帮助

c++ - 两台电脑不开端口通信,使用第三台电脑建立连接

c - Sonar C 插件——包含文件中的解析器错误

iphone - 如何知道一个数字是否大于iphone objective-c中的最大值

c - 连接字符串后的 Malloc() 内存损坏错误

c - 在循环范围外使用局部变量

c - 释放字符指针数组(字符串文字)?

c - 将数据写入 FUSE 命名管道