fscanf函数 php,php数组与fscanf的一些注意事项

这篇博文探讨了PHP中数组的特性和C++的scanf函数在处理输入时的区别。在PHP中,数组可以有非连续且任意类型的下标,不存在下标越界,当键不存在时默认返回空字符串。而PHP的fscanf函数按行处理输入,导致从"123"这样的输入中只能获取到第一个整数。解决方法包括使用格式化字符串或结合fgets与字符串解析函数。
摘要由CSDN通过智能技术生成

前面的一篇博文提到php中数组是没有下标越界这一说的,如下的程序可以正常运行:

print count($w) . "\n";

$w[3] = "rt";

$w[100] = "tt";

print $w[0] . $w[1] . $w[2] . $w[3] . $w[100] . "\n";

print_r( $w );

?>

结果为:

0

rttt

Array

(

[3] => rt

[100] => tt

)

由上print_r这一句的输入结果中可以看出,php中的数组其实实际上是“映射的集合”,是类似于python中字典和java中Map的一种数据结构。因此它的下标不需要是连续的,可以是离散的,甚至下标值可以是任意数据类型,不一定要是整数。这里的下标值其实就相当于键值对中的键名而已。而当下标(键名)在数组中不存在时,则php默认返回的值是空串""。

另外要注意php中的fscanf函数,看下面一段c++的代码:

#include

using namespace std;

int main()

{

int a[3];

for( int i = 0; i < 3; i++ )

scanf( "%d", a+i );

cout << a[0] << " " << a[1] << " " << a[2] << endl;

return 0;

}

若从键盘输入一行:1 2 3

则程序能输出正确结果为:1 2 3

而单纯地将这段程序改写成php,如下:

for( $i = 0; $i < 3; $i++ )

fscanf( STDIN, "%d", $a[$i] );

print $a[0]. " ". $a[1]. " ". $a[2] . "\n";

?>

即scanf改为fscanf后,则不能得到期望的结果。原因是,php中fscanf是把输入中的”一行“作为一个输入单位进行解析的,这样在输入”1 2 3“后,php从该字符串中解析到了第一个整数值1把它赋给a[0]后,字符串中剩余字符就会被忽略,程序等待下一行的输入。这就是c++中scanf和php中fscanf间要注意的区别。值得一提的是,php中开头的读文件函数基本都是以”行“为单位的。

若要让php能顺利进行输入,一般有两种方法,1 用格式化字符串,比如上面将fscanf的第二个参数改为 "%d%d%d"。2 用fgets函数读一行,然后自己利用split,int等函数进行字符串的解析,得到自己想要的数据。

原文:http://blog.csdn.net/blackboxwer/article/details/38340341

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值