2023-05-19 C语言非流输入

C语言非流输入

  • 前言
  • 一、windows平台
  • 二、linux平台
  • 总结


前言

一个有意思的问题c语言的输入输出问题, 网上很多答案, 总结一下.


一、windows平台

vs需要将getch()更改为_getch()

#include 
#include 
#include 

char chrArr[32];

int main()
{
    int i = 0;
    while ((chrArr[i] = getch()) && (chrArr[i] != '\r'))
    {
        ++i;
    }
    char *num;
    int lhs = strtol(chrArr, &num, 10);
    int rhs = atoi(num);

    printf("%d %d %d", lhs, rhs, lhs + rhs);
}

二、linux平台

#include 
#include 
#include 
#include 

int getch(void)
{
    return getchar();
}

void setio(bool bl)
{
    static struct termios tm, tm_old;
    if (bl)
    {
        tcgetattr(0, &tm);

        tm_old = tm;
        cfmakeraw(&tm); // 更改终端设置为原始模式,该模式下所有的输入数据以字节为单位被处理
        tcsetattr(0, TCSANOW, &tm);
    }
    else
    {
        tcsetattr(0, TCSANOW, &tm_old);
    }
}

char chrArr[32];

int main()
{
    setio(true);
    int i = 0;
    while ((chrArr[i] = getch()) && (chrArr[i] != '\r'))
    {
        ++i;
    }
    setio(false);
    char *num;
    int lhs = strtol(chrArr, &num, 10);
    int rhs = atoi(num);

    printf("%d %d %d\n", lhs, rhs, lhs + rhs);
}


总结

vs要用 _getch(), mingw和clang用getch(), linux平台需要自己实现, 这不是标准库中的东西, 所以不可移植…

你可能感兴趣的:(笔记,c语言,c++,开发语言)