关于scanf和scanf_s的注意事项及问题
2016-04-03 20:59
316 查看
1、scanf()是标准化格式输入,使用过程中需注意:在读入单个字符且格式说明符为%c时,空格、制表符、换行符也会被当做一个字符被输入。故字符最好不要和数据同时输入(个人理解,暂时没有找到解决问题的办法,文章后面有例子),可以使用getche()读一个字符再用scanf()读其他变量值。
2、scanf_s()是scanf()的扩展,也叫做安全函数,它能够解决字符输入超限溢出问题。如:
char code[10];
scanf(“%s”,&code);
当输入字符超过10时,就会溢出,也就是说scanf函数负责输入所有的输入字符,当输入超过数组大小时就会溢出;而使用scanf_s()如下:
char code[10];
scanf_s(“%s”,&code,10);
这个函数会进行参数检查,如果输入超过10个则只接受10个字符(参数传入),如果不超过10个则正常接收数据。
附错误用例:(要求在一行输入三个参数,一个字符,两个整形变量。一运行到这里就会终止程序)
char commond;
unsigned int A, B;
scanf("%c%d %d",&commond,1, &A, &B);
解决用例:
char commond;
unsigned int A, B;
commond = _getche();
scanf("%d %d", &A, &B);
2、scanf_s()是scanf()的扩展,也叫做安全函数,它能够解决字符输入超限溢出问题。如:
char code[10];
scanf(“%s”,&code);
当输入字符超过10时,就会溢出,也就是说scanf函数负责输入所有的输入字符,当输入超过数组大小时就会溢出;而使用scanf_s()如下:
char code[10];
scanf_s(“%s”,&code,10);
这个函数会进行参数检查,如果输入超过10个则只接受10个字符(参数传入),如果不超过10个则正常接收数据。
附错误用例:(要求在一行输入三个参数,一个字符,两个整形变量。一运行到这里就会终止程序)
char commond;
unsigned int A, B;
scanf("%c%d %d",&commond,1, &A, &B);
解决用例:
char commond;
unsigned int A, B;
commond = _getche();
scanf("%d %d", &A, &B);
相关文章推荐
- 在输入输出字符串时scanf(),printf()和gets(),puts()的区别浅谈
- 浅析C语言中printf(),sprintf(),scanf(),sscanf()的用法和区别
- 使用scanf询问用户是否继续
- 由scanf说起之1:scanf函数和回车、空格 及其返回值
- scanf&getchar&gets及一些特殊用法
- C语言基础-数据类型提升的层次结构
- APUE课后习题10.6练习代码
- 黑马程序员——C语言基础知识整理——printf函数与scanf函数
- [零基础学软件开发7]输入数据scanf及顺序结构
- 黑马程序员——C语言笔记之scanf函数及使用注意事项
- [C语言] 对于scanf()函数使用%d格式说明符无法读取字符的个人理解
- 那个虐了我的杭电1000
- 阿里测试开发笔试题--字符串相关知识
- scanf()函数慎重使用
- 解决scanf_s函数报错:没有为格式字符串传递足够的参数
- 关于scanf()函数
- (VS2012)C++行输入函数的使用(scanf_s,cin.getline,cin.get)
- C语言 gets()和scanf()函数的区别
- <<C和指针>>第1章之编程练习心得20140703
- 对于vs2012等高版本对scanf报警的