朝花夕拾丶 发表于 2019-12-15 16:03:02

关于getch()及putch()的顺序问题。

#include <stdio.h>
#include <conio.h>

void main()
{
        char c;
        while(1)               
        {
                c = getch();
                                                  //putch(c);
                if(13 == c)
                {
                        continue;
                }
                else if(27 == c)
                {
                        break;
                }
                putch(c);                //****此处putch如果写在c = getch();后面输出的方式为什么会有改变?
        }
        getch();
}


例如编译后随便输入一串字符,如若putch(c)按如上代码的位置进行编译 按 Enter 键之后可以接着目前已输入的字符串后面继续输入;
如果将putch(c)的位置改变一下,写在 c = getch() 后面,则每次输入一串字符按 Enter 键之后光标会从已输入的第一个字符开始以目前输入的字符去覆盖掉现有字符;


为什么会这样呢?

朝花夕拾丶 发表于 2019-12-16 11:25:42

看都没人看么~~~~

superbe 发表于 2019-12-16 14:59:19

本帖最后由 superbe 于 2019-12-16 15:02 编辑

按如上代码的位置的话,在 Enter 时执行的是 continue,相当于忽略这个字符,其它字符正常输入和显示。
放到 c = getch(); 后面的情况,getch() 把 Enter 处理成 '\r' (ascii码13),(这和 getchar() 不同(处理成 '\n', ascii码10)),然后 putch('\r') 会使光标位置移到行首,所以接下来输入的字符会覆盖掉行首的字符。

朝花夕拾丶 发表于 2019-12-17 21:51:21

superbe 发表于 2019-12-16 14:59
按如上代码的位置的话,在 Enter 时执行的是 continue,相当于忽略这个字符,其它字符正常输入和显示。
放 ...

初学,您说的意思我大概明白了。
也就是如果将putch(c)放在 c = getch()下面则没有经过continue判断语句,直接输出了"/r",
光标移到首行。
放在如上代码现有位置则所输入的Enter经过了continue,自动忽略掉了。

这么理解是否正确?

superbe 发表于 2019-12-18 21:04:29

是的, 理解正确。
页: [1]
查看完整版本: 关于getch()及putch()的顺序问题。