下载后可任意编辑C 语言 scanf 函数应用问题 c 语言的输入是由系统提供的库函数完成的。scanf 函数是 c 语言中最常用且功能最强的输入函数,但该函数如使用不慎,就会出现错误或得不到预想的结果。以下结果都是基于 Vc++6.0 运行环境。 一、格式说明符和输入项的三对应(类型、个数、顺序)scanf 函数格式中的格式说明(“%格式字符”)应与输入项数据类型一致,个数相等、顺序对应 ( 除 格 式 说 明 中 出 现 “ *” 附 加 格 式 说 明 字 符 外 ) 。 示 例 一 :inta,b;scanf("%d%d%d",&a,&b);printf("%d,%d",a,b);输入“345”时,输出“3,4”,没有错误提示信息,但是第三个数没有接收的变量,也就没有输出。再如 inta,b;scanf("%d",&a,&b);printf("%d,%d",a,b);输入“34”时,输出“3,-xxxx”,a 得到 3,但 b 是一个随机数,都是因为格式说明(“%格式字符”)与输入项个数不一致造成的。再如structst{intnum;charname[10];intage;floatscore;}student;scanf("%d,%s,%d,%f",&student);输入“10001,"zhang",23,68”,运行程序时,无出错信息,但 student 不能正确接收输入数据。 应该写成:scanf("%d,%s,%d,%f",&student.num,student.name,&student.age,&stu-dent.score);保证格式说明与输入项个数相等、一一对应,才能使 student 正确接收输入数据。示例二:chara,b;scanf("%d%d",&a,&b);printf("%d,%d",a,b);输入“34”时,输出“3,4”,输入整型数据,是字符型数据接收,但是结果正确,因为字符型数据 在 内 存 中 的 存 放 形 式 是 整 型 数 据 。 再 如 floata,b;scanf("%d%d",&a,&b);printf("%d,%d",a,b);输入“34”时,输出“0,xxxx”,即 a 和 b的结果都是随机数,这就是输入格式和接收的数据类型不一样造成的。又如:inta,b;scanf("%f%f",&a,&b);printf("%d,%d",a,b);输入“1.23.4”时,输出“xxxx,xxxx”,即 a 和 b 的结果都是随机数,这也是输入格式和接收的数据类型不一样造成的。 二、非格式说明符的输入非格式说明符要求用户原样照写输入,既不能更1下载后可任意编辑改,又不能漏写。示例一:inta,b;scanf("a=%d,b=%d",&a,&b);printf("%d,%d",a,b);输入“12”(即 1、2 间用空格隔开),输出“-xxxx,-xxxx”,无错误提示,但结果与输入数据不一致,输出 a、b 的值是随机数。这就是因为scanf 函数中设定的格式(“a=%d,b=%d”)(其中 a=...