用户定义的功能用于竞争编程中,以获取输入
User defined functions used in competitive programming to take input
我是竞争性编程的新手,我已经看到人们没有使用常规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*/ }
相关文章:
- 如何从用户那里获取输入并将其存储在向量中?
- 代码在执行之前终止,并且没有从用户那里获取输入
- 从用户获取输入/输出
- TFLite 隔离错误,通过获取C++输入和输出
- 如何使 std::istream 从键盘获取输入(如 std::cin)?
- 使用 qt 或 c++ 从桌面获取输入和输出
- 您如何在C++中不断获取输入?
- 从源代码本身C++获取输入
- 函数,从问题中获取输入,并在主函数中使用该输入
- 当我们声明 cin 为 int 并从 cin 中获取输入并在 cout 中打印 cin 时会发生什么?
- 如何在 std::map 中从 std::vector of std::p air 中获取输入?
- 有没有办法将 getline() 与外部文本文件一起使用,然后重新获得 cin 的控制权以从控制台获取输入?
- 从用户获取输入
- 我需要编写一个代码,从用户那里获取输入(句子)并停止在@处
- C 程序在获取输入[控制台应用程序]时跳过行
- 我在C++从函数中的用户获取输入、添加到数组和打印该数组时遇到问题
- 从用户那里获取输入,直到他输入一个数字
- 如何使用数组获取输入,并将其存储在record.h类的主类中的变量中
- getline 语句未获取输入
- 用户定义的功能用于竞争编程中,以获取输入