关于scanf的用法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于scanf的用法相关的知识,希望对你有一定的参考价值。
例如以下代码
#include<stdio.h>
#include<math.h>
int main()
int a,b;
b=scanf("%d",&a);
printf("the result is %d",b);
请问假如是以上例子,什么情况下输入打印出的数据为0?
很多大程序用到这样的scanf赋值,意义是什么?
scanf 函数最主要的用法是:
scanf("输入控制符", 输入参数);
函数原型:int scanf(const char * restrict format,...);
函数 scanf() 是从标准输入流stdin (标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。
扩展资料:
函数的第一个参数是格式字符串,它指定了输入的格式,并按照格式说明符解析输入对应位置的信息并存储于可变参数列表中对应的指针所指位置。每一个指针要求非空,并且与字符串中的格式符一一顺次对应。
发展:
使用scanf函数进行输入,必须指定输入的数据的类型和格式,不仅繁琐复杂,而且很容易出错。C++保留scanf只是为了和C兼容。
以便过去用C语言写的程序可以在C++的环境下运行。C++的编程人员都愿意使用cin进行输入,很少使用scanf。
但是scanf有一个明显的优点,速度比cin函数快。
参考资料:
百度百科-scanf (计算机语言函数)
scanf()是C语言中的一个输入函数。
scanf函数的用法与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>。(在有一些实现中,printf函数与scanf函数在使用时可以不使用预编译命令#include <stdio.h>。)它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。
扩展资料:
使用scanf函数的注意问题:
1、在高版本的 Visual Studio 编译器中,scanf 被认为是不安全的,被弃用,应当使用scanf_s代替 scanf。
2、对于字符串数组或字符串指针变量,由于数组名可以转换为数组和指针变量名本身就是地址,因此使用scanf()函数时,不需要在它们前面加上"&"操作符。
3、 可以在格式化字符串中的"%"各格式化规定符之间加入一个整数,表示任何读操作中的最大位数。
4、scanf函数中没有类似printf的精度控制。
如: scanf("%5.2f",&a); 是非法的。不能企图用此语句输入小数为2位的实数。
5、scanf中要求给出变量地址,如给出变量名则会出错
如 scanf("%d",a);是非法的,应改为scanf("%d",&a);才是合法的。
6、 在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔,则可用空格,TAB或回车作间隔。
C编译在碰到空格,TAB,回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。
7、在输入字符数据(%c)时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。
参考资料来源:百度百科-scanf (计算机语言函数)
具体如下:
1、记住一点,scanf认为遇到“非法输入”就结束。
2、scanf("%2d%f",&a,&b);中第一个格式控制字符2d的意思是读取2位,作为一个整数输入到给对应的变量a的地址中。输入876,当然只读取前2位87。这是2的作用,后面输入对于2来说,相当于非法输入。
3、对于%f,后面输入的是7 543.0,对于浮点型数据是不可能得到空格的,所以遇到空格,认为是非法输入,结束输入。所以b的值是6,即是6.000000。
4、scanf函数是C语言中的一个输入函数,与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include 。它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中,其关键字最末一个字母f即为“格式”(format)之意。
参考技术C scanf ("%d,%d",&a,&b);a,b 都为 int 型变量,格式化输入时用 %d,
而 %f是 float类型的变量 参考技术D scanf叫做格式化输入,所以呢,你的输入内容一定要和引号里的完全一致,有,那你输入也要有, 有空格那你的输入内容也必须包括空格。类型一定要匹配。提示要自己printf,没有就是对的,应该有个_再闪的
scanf函数与printf函数用法
一开始学习就是用的cin、cout,所有习惯用这个,但是后来做题发现这样的输入方式有弊端,所以决定整理熟悉一下scanf函数与printf函数。
头文件
# include <stdio.h>
scanf("输入控制符",输入参数)
- 在 scanf 的“输入参数”中,变量前面的取地址符
&
不要忘记。 - scanf 中双引号内,除了“输入控制符”外什么都不要写。
- “输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”一定要一一对应。
- “输入控制符”的类型和变量所定义的类型一定要一致。
// scanf 的"输入参数"中,变量前面的取地址符 &不要忘记 scanf("%d", &i); //输入一个整型数据 scanf("%f", &i); //输入一个浮点数 scanf("%c%c%c", &i, &j, &k);//字符
字符串:输入参数是已经定义好的"字符数组名", 不用加&, 因为在C语言中数组名就代表该数组的起始地址
scanf("%s",string);/*不能接收空格符*/ scanf("%[^/n]",string); scanf("%[^\n]",str);//直到输入回车键,读取才结束,当然不能超过str定义的大小,否则会出错。 // 此命令与gets(str)效果一样。
常用的输入并判断
while(scanf("%d",&n),n)//当n为0时中止循环
printf("输出控制符",输出参数)
//“输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”一定要一一对应。 printf("%d\n", i); printf("%d %d\n", i, j); printf("i = %d, j = %d\n", i, j);
%x、%X、%#x、%#X 的区别
一定要掌握 %x(或 %X 或 %#x 或 %#X),因为调试的时候经常要将内存中的二进制代码全部输出,然后用十六进制显示出来。下面写一个程序看看它们四个有什么区别:
# include <stdio.h> int main(void) int i = 47; printf("%x\n", i); printf("%X\n", i); printf("%#x\n", i); printf("%#X\n", i); return 0;
输出结果: 2f
2F
0x2f
0X2F
从输出结果可以看出:如果是小写的x
,输出的字母就是小写的;如果是大写的X
,输出的字母就是大写的;如果加一个#
,就以标准的十六进制形式输出。
最好是加一个#
,否则如果输出的十六进制数正好没有字母的话会误认为是一个十进制数呢!总之,不加#
容易造成误解。但是如果输出 0x2f 或 0x2F,那么人家一看就知道是十六进制。而且%#x
和%#X
中,笔者觉得大写的比较好,因为大写是绝对标准的十六进制写法。
转义字符
printf 中有输出控制符%d
,转义字符前面有反斜杠\
,还有双引号。
要输出%d
只需在前面再加上一个%
,要输出\
只需在前面再加上一个\
,要输出双引号也只需在前面加上一个\
即可。
# include <stdio.h> int main(void) printf("%%d\n"); printf("\\\n"); printf("\"\"\n"); return 0;
以上是关于关于scanf的用法的主要内容,如果未能解决你的问题,请参考以下文章