我以前总是在控制台命令中使用readline,但今天我遇到了fread和fgets函数,我的问题是:使用这两种方法有什么区别:
readline
fread
fgets
// first $inputLine = readline(); // second $inputLine = fgets(STDIN);
字符串他们俩做的都差不多不是吗
oug3syen1#
readline()默认从STDIN读取输入,而fgets()从任何资源读取。此外,readline()比fgets()执行时间更长
mefy6pfw2#
fgets比readline快得多。我不知道为什么,但我可以给予一些基准测试。我经常在codeforces.com上参与解决问题。有一个问题我有时间限制问题(当用PHP解决时),我使用readline解决问题的时间超过2秒。我用fgets替换readline-s后,解决时间为400毫秒。所以fgets相当快。
cczfrluj3#
从the readline docs:readline函数实现了一个GNU Readline库的接口。这些函数提供了可编辑的命令行。一个例子是Bash允许你使用箭头键插入字符或滚动命令历史。readline只接受一个参数,也就是$prompt字符串,它也会为你修剪新行。此外,扩展函数具有像bash这样的命令历史记录,可以让你使用箭头键滚动以前的条目,完成的能力等等。正如其他人在以前的回答中指出的那样,额外的功能确实增加了一点开销,所以可能会更慢。fgets更基本,它只是从文件指针获取输入。
$prompt
yyhrrdl84#
我发现的另一个区别是,与readline()不同,fgets()不能读取一些带有 *'é'**或 *'è'**口音的utf-8字符。这意味着你必须小心使用fgets(),因为如果你不得不使用西班牙语或法语这样的语言,它可能会包含错误。
readline()
fgets()
ohfgkhjo5#
我能想到的唯一可能的区别是readline()没有参数,默认情况下只能从STDIN读取输入,而fgets()可以从任何resource读取。所以,换句话说,readline()是fgets的同义词,第一个预定义的参数,比如fprintf()和printf()。考虑以下情况:
STDIN
resource
fprintf()
printf()
fprintf(STDOUT, "hello!"); printf("hello!);
字符串这在php标准库中很常见。
5条答案
按热度按时间oug3syen1#
readline()默认从STDIN读取输入,而fgets()从任何资源读取。此外,readline()比fgets()执行时间更长
mefy6pfw2#
fgets比readline快得多。我不知道为什么,但我可以给予一些基准测试。
我经常在codeforces.com上参与解决问题。有一个问题我有时间限制问题(当用PHP解决时),我使用readline解决问题的时间超过2秒。我用fgets替换readline-s后,解决时间为400毫秒。
所以fgets相当快。
cczfrluj3#
从the readline docs:
readline函数实现了一个GNU Readline库的接口。这些函数提供了可编辑的命令行。一个例子是Bash允许你使用箭头键插入字符或滚动命令历史。
readline
只接受一个参数,也就是$prompt
字符串,它也会为你修剪新行。此外,扩展函数具有像bash这样的命令历史记录,可以让你使用箭头键滚动以前的条目,完成的能力等等。正如其他人在以前的回答中指出的那样,额外的功能确实增加了一点开销,所以可能会更慢。fgets
更基本,它只是从文件指针获取输入。yyhrrdl84#
我发现的另一个区别是,与
readline()
不同,fgets()
不能读取一些带有 *'é'**或 *'è'**口音的utf-8字符。这意味着你必须小心使用
fgets()
,因为如果你不得不使用西班牙语或法语这样的语言,它可能会包含错误。ohfgkhjo5#
我能想到的唯一可能的区别是
readline()
没有参数,默认情况下只能从STDIN
读取输入,而fgets()
可以从任何resource
读取。所以,换句话说,readline()
是fgets
的同义词,第一个预定义的参数,比如fprintf()
和printf()
。考虑以下情况:
字符串
这在php标准库中很常见。