用户定义的功能用于竞争编程中,以获取输入

User defined functions used in competitive programming to take input

本文关键字:获取 输入 编程 竞争 定义 功能 用于 用户      更新时间:2023-10-16

我是竞争性编程的新手,我已经看到人们没有使用常规I/O流,例如CIN或Scanf(),而是将自己的功能定义为输入。有一个这样的功能,我遇到过很多次,但我没有得到代码。在这里是

int get(){
    char ch;
    while(ch=getchar(),(ch<'0'||ch>'9')&&ch!='-');
    if (ch=='-'){
        int s=0;
        while(ch=getchar(),ch>='0'&&ch<='9')s=s*10+ch-'0';
        return -s;
    }
    int s=ch-'0';
    while(ch=getchar(),ch>='0'&&ch<='9')s=s*10+ch-'0';
    return s;
}

此getchar()函数真正做什么,这整个功能的全部要点是什么。我想这必须是优化获取大型输入的代码,但是如何完成。对于经验丰富的人来说,这一定是一个愚蠢的问题,但由于我是新手,因此会不胜感激。

while(ch=getchar(),(ch<'0'||ch>'9')&&ch!='-');

跳过所有输入,直到0,1,2,3,4,5,6,7,8,9或 - 读取

if (ch=='-'){

如果读取负标志,请继续阅读数字:

    int s=0;

以零

的总和开始
    while(ch=getchar(),ch>='0'&&ch<='9')s=s*10+ch-'0';

在读取数字时,通过将前1小数点将前1个小数点移到左侧(乘以10)并添加下一个数字(减去0的ASCII值 '0'-> 0, '1'-> 1 etc)。/p>

    return -s;

返回总和,但负数。

如果不存在否定标志,我们会做完全一样的,但是返回正。

注释

没有解析定界符,嵌入式空间,正符号( 123),也没有任何范围/溢出检查。著名的怪癖:" AAAAA-"将被解析为0

结论:

不要这样做。使用scanf或 int i; if (std::cin >> i) { /*something*/ }