C语言scanf语句
例:使用scanf函数输入数据。
#include
int main(void)
{
int a,b,c;
printf("Give me the value of a,b,c seperated with whitespaces:
");
scanf("%d%d%d",&a,&b,&c);
printf("a=%d,b=%d,c=%d
",a,b,c);
return 0;
}
&a,&b,&c中的&是寻址操作符,&a表示对象a在内存中的地址 [3] ,是一个右值。变量a,b,c的地址是在编译阶段分配的(存储顺序由编译器决定)。
这里注意:如果scanf中%d是连着写的如“%d%d%d”,在输入数据时,数据之间不可以用逗号分隔。
只能用空白字符(空格或tab键或者回车键)分隔——“2 (空格)3(tab) 4” 或 “2(tab)3(回车)4”等。若是“%d,%d,%d”,则在输入数据时需要加“,”,如“2,3,4”。
(在有一些实现中,printf函数与scanf函数在使用时可以不使用预编译命令#include 。)它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。
scanf 是 scan format 的缩写,意思是格式化扫描,也就是从键盘获得用户输入,和 printf 的功能正好相反。
扩展资料:
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("%d %s %c %c",&person[i].num,&person[i].name,&person[i].sex,&person[i].job);
scanf("%s",&person[i].category.position);
2、把这两行中字符数组输入时前面的&符号去掉,对字符数组输入本身就是地址,不要加&,改成这样
scanf("%d %s %c %c",&person[i].num,person[i].name,&person[i].sex,&person[i].job);
scanf("%s",person[i].category.position);
3、其他的也没有什么错误,记着输入时候,那几个值之间用一个空格隔开,用scanf()函数输入的时候,本质是,你给scanf一个地址,这个函数会根据你输入的地址把,输入缓冲区中的数据放在指定地址处
4、像int ,char,double,long,float这些基本类型,再分配空间的时候,只是给他们一个空间,所以用scanf()输入的时候,要加&取地址符号,才能给他们赋值
5、然而char *,char [],这些本身是一块区域的首地址,本身就是地址,所以用scanf时,不用加&因此,输入里面不需要加的只有,person[i].name,person[i].category.position两个,其他的都是基本类型,因此都需要加
扩展资料:
优缺点
1、简洁紧凑、灵活方便
C语言一共只有32个关键字,9种控制语句,程序书写形式自由,区分大小写。把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。
C语言的 Hello World 程序
2、运算符丰富
C语言的运算符包含的范围很广泛,共有34种运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C语言的运算类型极其丰富,表达式类型多样化。灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。
3、数据类型丰富
C语言的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据结构的运算。并引入了指针概念,使程序效率更高。
4、表达方式灵活实用
C语言提供多种运算符和表达式值的方法,对问题的表达可通过多种途径获得,其程序设计更主动、灵活。它语法限制不太严格,程序设计自由度大,如对整型量与字符型数据及逻辑型数据可以通用等。
5、允许直接访问物理地址,对硬件进行操作
由于C语言允许直接访问物理地址,可以直接对硬件进行操作,因此它既具有高级语言的功能,又具有低级语言的许多功能,能够像汇编语言一样对位(bit)、字节和地址进行操作,而这三者是计算机最基本的工作单元,可用来写系统软件。
6、生成目标代码质量高,程序执行效率高
C语言描述问题比汇编语言迅速,工作量小、可读性好,易于调试、修改和移植,而代码质量与汇编语言相当。C语言一般只比汇编程序生成的目标代码效率低10%~20%。
7、可移植性好
C语言在不同机器上的C编译程序,86%的代码是公共的,所以C语言的编译程序便于移植。在一个环境上用C语言编写的程序,不改动或稍加改动,就可移植到另一个完全不同的环境中运行。
8、表达力强
C语言有丰富的数据结构和运算符。包含了各种数据结构,如整型、数组类型、指针类型和联合类型等,用来实现各种数据结构的运算。C语言的运算符有34种,范围很宽,灵活使用各种运算符可以实现难度极大的运算。
C语言能直接访问硬件的物理地址,能进行位(bit)操作。兼有高级语言和低级语言的许多优点。它既可用来编写系统软件,又可用来开发应用软件,已成为一种通用程序设计语言。另外C语言具有强大的图形功能,支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。
scanf()是C语言标准库中的输入函数,声明包含在stdio.h文件中,因此要使用该函数,必须加载#include<stdio.h>头文件。当执行到scanf函数时,程序就暂停等待用户输入,该函数只接受变量的地址,格式为&变量名。是一个阻塞式的函数,等用户输入完毕后,则将值赋值给变量,至此函数调用完毕。敲回车键告知计算机键入完毕。
函数原型:int scanf(const char *format,...);
说明:scanf() 是从标准输入流stdio (标准输入设备,一般是键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。
其调用形式为: scanf("<格式说明字符串>",<变量地址>);变量地址要求有效,并且与格式说明的次序一致。
使用示例:
//使用scanf函数输入一个字符变量。
char a;
scanf(“%c”,&a);
//同时输入多个值。
scanf(“%d,%d”,&num1,num2);
//在内部不能使用
转义字符,否则没完没了。
scanf(“%d
”,&a);
注意:在这里两个占位符之间是,隔开,则要求在输入时也使用逗号隔开如输入1,2。此时为num1=1,num2=2。若内部为“%d#%d”则输入1#2。若内部为“%dy%d”,则输入1y2。如果中间的字符是空格,则在输入时可以用空格隔开,也可以敲tab键或者是回车键作为分隔符隔开,后两者可以看做是由空格组成的。
扩展:格式说明符
转换字符(就是%后跟的部分)
a 读浮点值(仅适用于 C++)
A 读浮点值(仅适用于 C++)
c 读单字符
d 读十进制整数
i 读十进制、八进制、十六进制整数
e 读浮点数
E 读浮点数
f 读浮点数
F 读浮点数(仅适用于 C++)
g 读浮点数
G 读浮点数
o 读八进制数
s 读字符串
x 读十六进制数
X 读十六进制数
p 读指针值
n 至此已读入值的等价字符数
u 读无符号十进制整数
[ ] 扫描字符集合
% 读 % 符号(百分号)
附加格式说明字符表修饰符说明
L/l 长度修饰符 输入"长"数据
h 长度修饰符 输入"短"数据
W 整型常数 指定输入数据所占宽度
* 表示本输入项在读入后不赋值给相应的变量
这句不是让你自己在执行时输入代表性别的字符么
char sex,*num,*name,*birth,*add; (这句,你的sex后的逗号不对,按我这个)
int age;
printf("student num:");
scanf("%s",num);
printf("student name:");
scanf("%s",name);
printf("student age:");
scanf("%d",&age);
printf("student sex:");
scanf(" %c",&sex); (%c前面加一个空格)
printf("student brith:");
scanf("%s",birth);
printf("student add:");
在%c前面加一个空格如下:
scanf(" %c",&sex);
scanf读取的是当前键盘缓冲区中的数据,而不是用户当前的输入的数据,
所以当键盘缓冲区清空的不及时的话,
会导致读入数据不正确。
在这个代码中就是由于编译系统本身对于键盘缓冲区清空的不及时,
导致scanf读入了上次输入数据时最后输入的回车,做为了本次用户输入,
可以人为的强制进行键盘缓冲区清空,来解决这个问题。
fflush(stdin);//强制进行键盘缓冲区清空语句
这么改:
char sex,*num,*name,*birth,*add;
int age;
printf("student num:");
fflush(stdin);
scanf("%s",num);
printf("student name:");
fflush(stdin);
scanf("%s",name);
printf("student age:");
fflush(stdin);
scanf("%d",&age);
printf("student sex:");
fflush(stdin);
scanf("%c",&sex);
printf("student brith:");
fflush(stdin);
scanf("%s",birth);
printf("student add:");
C语言,语句scanf("","");
首先,这个语句显然是有问题的,但是能编译通过,说明是合法的。那么我们就需要弄清楚编译器是怎么理解这条语句的,以及运行时这条语句做了什么。原问题是“C语言,语句scanf("7.2f",&a);是一个合法的scanf函数?”,我猜测这里"7.2f"应该问的是"%7.2f",但是也可能就是"7.2f",所以对这两种...
scanf在c语言中的作用
scanf在c语言中的作用是:格式化输入、自动跳过空白字符。1、格式化输入:scanf可以根据指定的格式从标准输入(通常是键盘)读取并解析数据。这是scanf最基本且最重要的特点。通过指定格式,scanf能够读取各种类型的数据,包括整数、浮点数、字符、字符串等。这对于需要按特定格式读取数据的情况非常有用。2、...
C语言scanf语句
scanf()是C语言标准库中的输入函数,声明包含在stdio.h文件中,因此要使用该函数,必须加载#include<stdio.h>头文件。当执行到scanf函数时,程序就暂停等待用户输入,该函数只接受变量的地址,格式为&变量名。是一个阻塞式的函数,等用户输入完毕后,则将值赋值给变量,至此函数调用完毕。敲回车键告知...
C语言中的scanf是什么意思
值得注意的是,scanf是C语言结构化编程的一部分,它将高级语言的清晰结构与低级语言的实用性结合,提供了灵活的代码单元。此外,C语言代码可以在多种操作系统和硬件平台上运行,如Windows、DOS和UNIX,特别适合需要直接操作硬件的场合,尽管这增加了潜在的安全风险。C++在指针操作上做了改进以提高安全性,而...
C语言中, scanf()是什么意思?
include"stdio.h"main(){ inta,b,c,t;printf("pleaseinputa,b,c:");scanf("%d,%d,%d",&a,&b,&c);t=a;a=b;b=c;c=t;printf("%d,%d,%d",a,b,c);getch();}
scanf在c语言中的作用
在C语言中,scanf扮演着至关重要的角色,它是标准库函数,专门用于接收用户输入的数据。这一功能与printf输出数据的功能形成鲜明对比。scanf的输入格式非常灵活,可以根据需要选择,例如,最常见的就是用于接收十进制整数的输入,格式为%d。使用scanf时,可以明确指定变量来接收输入。例如,要输入一个整数并...
c语言scanf的用法
c语言scanf的用法是c语言scanf中格式控制字符串后面是变量地址。变量名。但在使用s格式输入字符数组时,变量名本身就是字符串的首地址,不需要加地址运算符。scanf函数没有计算功能,因此输入的数据只能是常量,不能是表达式,scanf函数的格式控制字符串也是以%开始,以一个格式字符结束,中间可以插入附加的...
C语言中的scanf是什么意思
C语言中scanf是标准库函数,主要用来接收用户输入的数据。scanf与printf函数一样,都被定义在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>。它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。函数格式:int scanf(char *format, args, ...);功 能...
c语言scanf的用法
用法:int scanf(char*format,[argument,...]);scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘)读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。其调用格式为:scanf(“<格式化字符串>”,<地址表>);scanf()函数返回成功赋值的数据项数,出错时则返回EOF;...
C语言中的Scanf的用法
C语言中的scanf函数是用于从标准输入流stdin(即键盘)读取数据的重要工具。其基本用法是通过格式字符串指定输入的模式,并将读取的数据存储到相应的变量中,函数原型为int scanf(const char* restrict format,...)。在使用scanf时,格式字符串中的格式说明符决定了如何解析输入内容。这些说明符与输入参数...
竺光瑞坦: scanf是C语言中的一个输入函数,与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include .(在有一些实现中,printf函数与scanf函数在使用时可以不使用预编译命令#include .)它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中.scanf函数返回成功读入的数据项数,读入数据时遇到了“文件结束”则返回EOF.
灵丘县13641523425: c语言中的scanf是什么意思 - ?
竺光瑞坦: 1、scanf的意思是 格式输入函数2、函数作用:按照变量在内存的地址将变量值存进去3、scanf函数的一般形式为:“格式控制字符串”, 地址表列其中,格式控制字符串的作用与printf函数相同,但不能显示非格式字符串,也就是不能显示提示字符串.地址表列中给出各变量的地址.地址是由地址运算符“&”后跟变量名组成的.例如:&a、&b分别表示变量a和变量b的地址.这个地址就是编译系统在内存中给a、b变量分配的地址.
灵丘县13641523425: C语言中scanf的使用 - ?
竺光瑞坦: scanf("a=%d b=%d",&a,&b);scanf(" x=%f y=%e",&x,&y);scanf(" c1=%c c2=%c",&c1,&c2); “”里面的是输入的格式,也就是说你的写法待会要输入的就是a=10 b=10 x=1.1.....为什么是这样呢~ 因为你的格式写成这样了~而且不是连着写的~那么必然你是必须要加空格在里面的~scanf(" x=%f y=%e",&x,&y); 这句话的空格里面第一个字符就是空格
灵丘县13641523425: C语言中~scanf表示什么 - ?
竺光瑞坦: C语言中scanf是标准库函数,主要用来接收用户输入的数据. 函数格式:int scanf(char *format, args, ...); 功 能:从标准输入设备按format指定格式输入数据给args所指向的内存单元返 回 值 :读入并赋给args的数据个数.遇文件结束返回EOF,出错返回0 举例如下: int a;scanf("%d", &a); // 按%d的格式(即整型的格式),将用户输入的数据赋值给&a指向的内存单元(即变量a所在的内存单元).// 简单理解就是将用户输入的数转换为int类型并赋值给变量a
灵丘县13641523425: C语言scanf是什么意思 - ?
竺光瑞坦: scanf是一个函数,与printf函数一样,它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中,其关键字最末一个字母f即为“格式”(format)之意
灵丘县13641523425: c语言中scanf语句中.%3f%3f与%3f,%3f的区别 - ?
竺光瑞坦: 在scanf语句%3f%3f与%3f,%3f的区别主要是,输入的时候的区别: 例如,scanf("%3f%3f",&a,&b);那么正确的输入就是1.0回车2.0,1.02.0,1.0 2.0都正确但是1.0,2.0就要出错,他就会把','号也当成你的输入的一员 如果是,scanf("%3f,%3f",&a,&b);那么正确的输入就是1.0,2.0,其他的都会出问题,因为你的scanf里面有','号他就会要求跟scanf里面的格式一样,他会找','号的
灵丘县13641523425: c语言中的scanf 函数的用法 - ?
竺光瑞坦: 输出的值只是空格前面的字符是因为scanf函数的输入格式错误,输入参数的变量前需要加&.scanf("%s",s);改为scanf("%s",&s); scanf的用法是:scanf("格式控制字符串",输入参数一,输入参数二);格式控制字符串包含:格式控...
灵丘县13641523425: c语言 scanf语句 - ?
竺光瑞坦: scanf("%d",&a);//这个语句要求你按10进制输入a的值,A不是10进制. 相当于没有输入,a的值不确定.
灵丘县13641523425: c语言scanf的用法, - ?
竺光瑞坦: 在执行第二个scanf的时候其实是接收了一个回车符,打印的时候看不到,你在第二个scanf之前加一个getchar();或者在%c之前加一个空格就好使了.
灵丘县13641523425: c语言scanf语句 - ?
竺光瑞坦: 这涉及内存配置,num和c依次进栈,假设num是0x...4~0x..7,c就是0x..2~0x...3,输入num的那行没问题,接下来输入一个4字节int存放到&c也就是0x..2~0x..5,可见覆盖了num的低2位字节,计算机采用小端存放数据,也就是低字节存放低位数据,所以num的结果是(输入num&65535)|((输入c&65535)>>16)