scanf系列

原帖:内网cc98论坛,作者shifan3

Q1:为什么使用scanf的时候会导致程序出错或者应该改变的变量没有改变?

A1:用scanf写入的变量必须将其指针传入参数,例如:
int n;
scanf(“%d”, &n);
但对于%s读取字符串,则仅需要传入字符数组的首地址:
char buf[100];
scanf(“%s”, buf);

Q2:scanf如何判断输入流的结束

A2:scanf遇到输入流结束会返回-1(EOF)。

Q3:scanf读取字符串时需要注意什么?

A3:首先,scanf的%s读取字符串时会遇见空格就停止,因此不要用%s来读取整行(除非能确定整行一定没有空格和tab)
其次,scanf不知道用于接收字符的数组的长度,所以如果数组太小则可能导致越界。

Q4:sscanf,fscanf是做什么的。

A4:scanf是向键盘读取数据,而fscanf是向文件读取数据,sscanf是向一个字符串数组读取数据
参考:Rhythm的总结

Q5:scanf系列的返回值代表什么?

A5:除了-1表示流结束之外,scanf的返回值还代表了成功读取并赋值的变量的个数,读取但没有赋值的并不记在内,返回0表示没有赋值。

Q6:如何读取long long?

A6:用%lld, 该方法在较老的编译器里不支持。

Q7:为什么在VC8中使用scanf会有警告?

A7:VC8认为scanf存在安全隐患(见Q1和Q3),所以不建议使用,基本可以无视之。

最后,由于scanf使用了可变参数,因此不具备类型安全的特性,使用的时候切记保持参数数量和类型正确。

作者: 投稿者(Guest)

本账号专门用于发表“转载资料”以及读者的投稿

发表评论

电子邮件地址不会被公开。 必填项已用*标注