您的位置:首页 > 其它

scanf()函数学习-关键知识点

2015-05-04 12:55 155 查看
scanf()函数基本功能:执行格式化输入;

用法:int scanf(char *format[,argument...]);返回值为正确输入变量的个数;

需要注意的知识点:

(1)对含空格字串的处理:

scanf()函数在处理含空格的字串时,会将字串空格后面的内容舍弃,遇到空格读取结束,eg. scanf("%s",&str); str="ab cd"时,str="ab",此时,若想读取全部字串,可以使 用scanf("%[^\n]",&str); str="ab cd"时,str="ab cd";或者使用gets()函数 gets(str); (注意:gets函数自动将最后输入的回车键转换为'\n',如果输入超过数组长度,出错)。

(2)键盘缓冲区残余信息:

#include<stdio.h>

int main(void)

{

int a=0;

char c='a';

scanf("%d",&a);

scanf("%c",&c);

printf("a=%d c=%c\n",a,c);

return 0;

}

scanf("%c",&c);这句不能正常接收字符,什么原因呢?我们用printf("c=%d/n",c);将C用int表示出来,启用printf("c=%d/n",c);这一句,看看scanf()函数赋给C到底是什么,结果是 c=10 ,ASCII值为10是什么?换行即/n.对了,我们每击打一下"Enter"键,向键盘缓冲区发去一个“回车”(/r),一个“换行"(/n),在这里/r被scanf()函数处理掉了,而/n被scanf()函数“错误”地赋给了c.

解决办法:

可以分别在两个scanf()函数之后加个fflush(stdin);,还有加getch(); getchar();也可以,但是要视具体scanf()语句;

scanf("%d",&a);

fflush(stdin);

scanf("%c",&c);

fflush(stdin);

(3)[ ]和[^ ]的使用:

%[1234567890]:如果输入的字符属于方括号内字符串中某个字符,那么就提取该字符;如果 一经发现不属于就结束提取。该方法会自动加上一个字符串结束符到已经提取的字符后面)

%[^1234567890]:如果一经发现输入的字符属于方括号内字符串中某个字符,那么就结束提取;如果不属于就提取该字符。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: