求printf和scanf的具体用法以及举例 C语言 二级考试

作者&投稿:樊陶 (若有异议请与网页底部的电邮联系)
c语言中scanf和printf都是输出函数,两者有什么区别呢~

两者完全不同,scanf是输入函数,printf是输出函数,所以会经常同时出现。两者也没有可比性,需要弄清他们的概念。
1.scanf()是C语言中的一个输入函数。函数 scanf() 是从标准输入流stdio (标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。
比如:scanf("%d %d",&a,&b);
函数返回值为int型。如果a和b都被成功读入,那么scanf的返回值就是2;
如果只有a被成功读入,返回值为1;
如果a和b都未被成功读入,返回值为0;
如果遇到错误或遇到end of file,返回值为EOF。end of file为Ctrl+z 或者Ctrl+d。
2.printf()函数是格式化输出函数, 它是c语言中产生格式化输出的函数(在 stdio.h 中定义)。用于向终端(显示器、控制台等)输出字符。格式控制由要输出的文字和数据格式说明组成。
printf 函数的一般形式为:
int printf(const char *format, [argument]);
Format 参数是包含三种对象类型的一个字符串:
(1)无格式字符复制到输出流;
(2)转换规范,每个规范导致在值参数列表中检索 1 个或更多个项;
(3)转义序列。
[Argument]包含需要输出的数据,可以是常量(字符常量、数字常量、字符串常量),变量,以及运算式。此处的数据应当与前面的format中的格式控制符一一对应(如果不对应会产生错误)。
例子:
#include
int main(){int i, j;
scanf("%d %d", &i, &j); //获得输入值i,j;
printf("i=%d;j=%d", i, j); //输出i,j;
return 0;}

扩展资料:
在C语言或C++中,会把用来#include的文件的扩展名叫 .h,称其为头文件。 #include文件的目的就是把多个编译单元(也就是c或者cpp文件)公用的内容,单独放在一个文件里减少整体代码尺寸;或者提供跨工程公共代码。
stdio 就是指 “standard input & output"(标准输入输出)。
在C语言中,输入和输出是经由标准库中的一组函数来实现的。在ANSI C中,这些函数被定义在头文件中。所以,源代码中如用到标准输入输出函数时,就要包含这个头文件.
引用方法:#include ;
有三个标准输入/输出是标准I/O库预先定义的:
stdin标准输入;
stdout标准输出;
stderr输入输出错误。
参考资料:printf-百度百科
scanf-百度百科

printf 是以 两字符宽输出 对应的字符
scanf 是 表示读两个字符,但是这里是%c,所以会把最先读到的字符赋给对应字符变量 但是要注意,其实程序已经读了两字符(及输入流里的前两字符已读过),所以读完该字符给变量后,当有下一个变量也要从输入流读数据时,会直接读第三个字符;
举个例子吧
比如我想定义了两字符 ch1 ch2
然后有该语句 scanf( "%2c%c", &ch1, &ch2 );
printf( "%c%c", ch1, ch2 );
然后我在运行该程序输数据时输入 somejob 后 按回车键
这时 输出结果会是 s m
也就是说 读数据至ch2时好像跳过了第二个字符 ,直接把第三字符读入ch2中
但是 如果你写成 scanf( "%c%c", &ch1, &ch2 );
其结果会是 s o

printf()函数
printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出
信息。在编写程序时经常会用到此函数。printf()函数的调用格式为:
printf("<格式化字符串>", <参量表>);
其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原
样输出; 另一部分是格式化规定字符, 以"%"开始, 后跟一个或几个规定字符,
用来确定输出内容格式。
参量表是需要输出的一系列参数, 其个数必须与格式化字符串所说明的输出
参数个数一样多, 各参数之间用","分开, 且顺序一一对应, 否则将会出现意想
不到的错误。
1. 格式化规定符
Turbo C2.0提供的格式化规定符如下:
━━━━━━━━━━━━━━━━━━━━━━━━━━
符号 作用
──────────────────────────
%d 十进制有符号整数
%u 十进制无符号整数
%f 浮点数
%s 字符串
%c 单个字符
%p 指针的值
%e 指数形式的浮点数
%x, %X 无符号以十六进制表示的整数
%0 无符号以八进制表示的整数
%g 自动选择合适的表示法
━━━━━━━━━━━━━━━━━━━━━━━━━━
说明:
(1). 可以在"%"和字母之间插进数字表示最大场宽。
例如: %3d 表示输出3位整型数, 不够3位右对齐。
%9.2f 表示输出场宽为9的浮点数, 其中小数位为2, 整数位为6,
小数点占一位, 不够9位右对齐。
%8s 表示输出8个字符的字符串, 不够8个字符右对齐。
如果字符串的长度、或整型数位数超过说明的场宽, 将按其实际长度输出。
但对浮点数, 若整数部分位数超过了说明的整数位宽度, 将按实际整数位输出;
若小数部分位数超过了说明的小数位宽度, 则按说明的宽度以四舍五入输出。
另外, 若想在输出值前加一些0, 就应在场宽项前加个0。
例如: %04d 表示在输出一个小于4位的数值时, 将在前面补0使其总宽度
为4位。
如果用浮点数表示字符或整型量的输出格式, 小数点后的数字代表最大宽度,
小数点前的数字代表最小宽度。
例如: %6.9s 表示显示一个长度不小于6且不大于9的字符串。若大于9, 则
第9个字符以后的内容将被删除。
(2). 可以在"%"和字母之间加小写字母l, 表示输出的是长型数。
例如: %ld 表示输出long整数
%lf 表示输出double浮点数
(3). 可以控制输出左对齐或右对齐, 即在"%"和字母之间加入一个"-" 号可
说明输出为左对齐, 否则为右对齐。
例如: %-7d 表示输出7位整数左对齐
%-10s 表示输出10个字符左对齐
2. 一些特殊规定字符
━━━━━━━━━━━━━━━━━━━━━━━━━━
字符 作用
──────────────────────────
\n 换行
\f 清屏并换页
\r 回车
\t Tab符
\xhh 表示一个ASCII码用16进表示,
其中hh是1到2个16进制数
━━━━━━━━━━━━━━━━━━━━━━━━━━
由本节所学的printf()函数, 并结合上一节学习的数据类型, 编制下面的程
序, 以加深对Turbo C2.0数据类型的了解。
例1
#include<stdio.h>
#include<string.h>
int main()
{
char c, s[20], *p;
int a=1234, *i;
float f=3.141592653589;
double x=0.12345678987654321;
p="How do you do";
strcpy(s, "Hello, Comrade");
*i=12;
c='\x41';
printf("a=%d\n", a); /*结果输出十进制整数a=1234*/
printf("a=%6d\n", a); /*结果输出6位十进制数a= 1234*/
printf("a=%06d\n", a); /*结果输出6位十进制数a=001234*/
printf("a=%2d\n", a); /*a超过2位, 按实际值输出a=1234*/
printf("*i=%4d\n", *i); /*输出4位十进制整数*i= 12*/
printf("*i=%-4d\n", *i); /*输出左对齐4位十进制整数*i=12*/
printf("i=%p\n", i); /*输出地址i=06E4*/
printf("f=%f\n", f); /*输出浮点数f=3.141593*/
printf("f=6.4f\n", f); /*输出6位其中小数点后4位的浮点数
f=3.1416*/
printf("x=%lf\n", x); /*输出长浮点数x=0.123457*/
printf("x=%18.16lf\n", x);/*输出18位其中小数点后16位的长浮点
数x=0.1234567898765432*/
printf("c=%c\n", c); /*输出字符c=A*/
printf("c=%x\n", c); /*输出字符的ASCII码值c=41*/
printf("s[]=%s\n", s); /*输出数组字符串s[]=Hello, Comrade*/
printf("s[]=%6.9s\n", s);/*输出最多9个字符的字符串s[]=Hello,
Co*/
printf("s=%p\n", s); /*输出数组字符串首字符地址s=FFBE*/
printf("*p=%s\n", p); /* 输出指针字符串p=How do you do*/
printf("p=%p\n", p); /*输出指针的值p=0194*/
getch();
retunr 0;
}
scanf():int scanf("<格式化字符串>", <参量表>);
这应该是scanf的标准形式。先说说关于他的返回值的问题。
库函数几乎都是有返回值的,有些人可能很奇怪,怎么很少人用过scanf的返回值呢?
scanf会返回成功接收到的变量数量的值。比如scanf("%d",&j"),与scanf("%d=",&j),如果接受成功的话返回值都是1
我用如下语句作了测试
#include <stdio.h>
int main (){
int j;
printf ("%d",scanf("%d\n",&j));
return 0;
}
如果你开始就输入回车,程序会继续等待你输入,因为在输入数字的时候,scanf会跳过空白字符。(the c programming language 上说,scanf实际上是用getchar()接受由数字组成的字符串,再转换成数字)
如果我输入ctrl-z(unix上是ctrl-d)则会返回-1(随编译器而定).这实际上就是常量EOF的值,也就是所谓的返回eof
如果我键入的不是数字返回值就是0。但是如果我输入浮点数,又会怎么样呢?
我举的例子中同样会返回1,但是缓冲区会留下垃圾,如果是scanf("%d%d",&a,&b);则会出错。
这是可以使用一个库函数fflush(stdin)来清除缓冲。不过有人说这个用法是非标准的。K&R,只是说行为没有定义,但我们可以使用while((c=getchar())!='\n'&&c!=EOF);同样可以清除后面的垃圾
scanf的格式匹配还是比较简单,一定要记住的就是普通变量一定要加上&,否则编译器无法检测错误,但运行肯定会段错误。
┏━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 代 码 │ 意 义 ┃
┠────┼────────────────────────────┨
┃ %a │读浮点值(仅适用于 C99) ┃
┃ %A │读浮点值(仅适用于 C99) ┃
┃ %c │读单字符 ┃
┃ %d │读十进制整数 ┃
┃ %i │读十进制、八进制、十六进制整数 ┃
┃ %e │读浮点数 ┃
┃ %E │读浮点数 ┃
┃ %f │读浮点数 ┃
┃ %F │读浮点数(仅适用于 C99) ┃
┃ %g │读浮点数 ┃
┃ %G │读浮点数 ┃
┃ %o │读八进制数 ┃
┃ %s │读字符串 ┃
┃ %x │读十六进制数 ┃
┃ %X │读十六进制数 ┃
┃ %p │读指针值 ┃
┃ %n │至此已读入值的等价字符数 ┃
┃ %u │读无符号十进制整数 ┃
┃ %[ ] │扫描字符集合 ┃
┃ %% │读 % 符号(百分号) ┃
┗━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
前面都很简单,%p,%n很少用到,跳过。要输入%必须要在前面再加一个%,
重点来谈谈%s和%[]。%s是读入一个数组,他与gets的区别就在于%s会以任何的空字符结束,而gets是回车结束。
同样%s前可以加数字,表示只读多少个。
ANSI C 标准向 scanf() 增加了一种新特性,称为扫描集(scanset)。 扫描集定义一个字符集合,可由 scanf() 读入其中允许的字符并赋给对应字符数组。 扫描集合由一对方括号中的一串字符定义,左方括号前必须缀以百分号。 例如,以下的扫描集使 scanf() 读入字符 A、B 和 C:
%[ABC]
使用扫描集时,scanf() 连续吃进集合中的字符并放入对应的字符数组,直到发现不在集合中的字符为止(即扫描集仅读匹配的字符)。返回时,数组中放置以 null 结尾、由读入字符组成的字符串。
对于许多实现来说,用连字符可以说明一个范围。 例如,以下扫描集使 scanf() 接受字母 A 到 Z:
%[A-Z]
重要的是要注意扫描集是区分大小写的。因此,希望扫描大、小写字符时,应该分别说明大、小写字母。
对于%[]还可以用^+任意字符(包括eof)来结束字符串的输入。比如%[^EOF]就是直到有EOF输入,字符串才中止。
但一定要记住就是c语言是缓冲输入,即使你%[^a],再你输入回车之前输入多少的a都是不可能结束的。
%s的输入会跳过空白字符,但是%c则不会。
这也就是
scanf("%d",&h);
scanf("%c",&c);
如果这写的话,变量c放的一定是回车。
如果想实现这种输入,可以在两个语句之间加入一个getchar(),他可以吃掉这个回车,
也可用scanf("%d %c",&h,&c);来做,再输入数字后加一个空格。就可以了
但千万别用scanf("%d\n",&h)!!!!!!!!k&r说的十分清楚,任何非格式化的字符都需要完全匹配。
意味着,只有输入数字后面再加\n才是合法的。
还有就是*加在任何项的前面表示该项不符值,别的就没什么好说的了

printf函数格式:printf(格式控制,输出表列)
"格式控制"是用双引号括起来的字符串,包括格式说明和普通字符。格式说明是由"%"和格式字符组成,作用是将输出的数据转换成指定的格式输出。普通字符原样照印。
(1) d格式符。用来输出10进制整数,包括下面3种用法。
%d,格式符,按整型数的实际长度输出。
%md,m为指定的输出字段宽度。如果数据的位数小于m,右对齐,左补空格,若大于m,按实际位数输出。
%ld,输出长型数据。
(2)o格式符,以8进制形式输出整数。
(3)x格式符,以16进制形式输出整数。
(4)u格式符,以10进制形式输出无符号数。
(5)c格式符,输出一个字符。
(6)s格式符,用来输出一个字符串。
%s,按字符串的实际长度输出,包括下面4种用法。
%ms,m为指定的输出字段宽度,如果字符串的长度小于m,右对齐,左补空格,若大于m,按实际位数输出。
%-ms,m为指定的输出字段宽度,如果字符串的长度小于m,左对齐,右补空格,若大于m,按实际位数输出。
%m.ns,m为指定的输出字段宽度,n为输出字符数。如果nm,m自动取n值,保证n个字符正常输出。
%-m.ns,m为指定的输出字段宽度,n为输出字符数。如果nm,m自动取n值,保证n个字符正常输出。
(7)f格式符,用来输出实数,包括下面3种用法。
%f,整数部分全部输出并输出6位小数。
%m.n ,m为指定的输出字段宽度,n为小数位数。如果数值长度小于m,右对齐,左补空格。
%-m.n ,m为指定的输出字段宽度,n为小数位数。如果数值长度小于m,左对齐,右补空格。
(8)e格式符,以指数形式输出实数,包括下面3种用法。
%e,输出6位小数和5位指数部分共占13位。
%m.ne,m为指定的输出字段宽度,n为小数位数。如果数值长度小于m,右对齐,左补空格。
%-m.ne,m为指定的输出字段宽度,n为小数位数。如果数值长度小于m,左对齐,右补空格。
(9)g格式符,根据数值大小自动选取f格式或e格式输出。
表3-2 printf格式符格式符 说明
d 以带符号的十进制形式输出整数
o 以8进制无符号形式输出整数
x 以16进制无符号形式输出整数
u 以无符号10进制形式输出整数
c 以字符形式输出,只输出一个字符
s 输出字符串
f 以小数形式输出单、双精度数
e 以标准指数形式输出单、双精度数
g 选用%f或%e格式中输出宽度较短的格式
表3-3 printf附加格式符字符 说明
l 用于长整型数,可加在格式符d、o、x、u前面
M(代表一个正整数) 数据最小宽度
n(代表一个正整数) 对实数,表示输出n位小数;对字符串,表示截断的字符个数
- 输出的数字或字符左对齐scanf函数 格式:scanf(格式控制,地址表列)
格式控制见表3-4和3-5。地址表列是由若干个地址组成的表列,可以是变量的地址或字符串的首地址。
表3-4 scanf格式符格式符 说明
d 输入10进制整数
o 输入8进制整数
x 输入16进制整数
c 输入单字符
s 输入字符串
f 输入实数
表3-5 scanf附加格式符字符 说明
l 用于输入长型数据以及双精度数据
h 用于输入整型数据
m(代表一个正整数) 指定输入数据所占宽度
* 输入数据读入后不赋给相应的变量


C语言 统计学生成绩
printf("第%d门功课的平均分是: %.2lf\\n",j+1,sum\/10);} return ;} void maxsc(){ printf("\\n");double max=-1;int i,j;for( i=0;i<10;i++){ for( j=0;j<5;j++)if(max<s[i].score[j]){ max=s[i].score[j];} } printf("最高分是:%.2lf分,对应学生与功课...

C语言:怎样输入一个字母,输出下一个字母
C语言:怎样输入一个字母,输出下一个字母,可以参考下面的代码:include<stdio.h> int main(){ char a,a1;scanf("%c",&a);a1=a+1;printf("%c",a1);}

编程里开始的 #include <stdio.h> 是什么意思
在本例中,使用了三个库函数:输入函数scanf,正弦函数sin,输出函数printf。sin函数是数学函数,其头文件为math.h文件,因此在程序的主函数前用include命令包含了math.h。scanf和printf是标准输入输出函数,其头文件为stdio.h,在主函数前也用include命令包含了stdio.h文件。

学生成绩管理系统(c语言程序设计)
printf("|rec|nO | name | sc1| sc2| sc3| sum | ave |order|\\n"); printf("|---|---|---|---|---|---|---|---|---|\\n"); while(p!=NULL) { i++; printf("|%3d |%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\\n", i, p->no,p->name,p->score[0],...

c语言作业 编写一个输出学生成绩等级的程序
printf("%4.2f ", *(*(score+n)+i));printf("\\n");} 下面是主函数 int main(){ int num,i;\/\/定义一个数组aveCourse来存储每门课的平均成绩,定义变量aveAll来存储总的平均成绩 float aveAll,aveCourse[4];float score[4][4] = {{67, 78, 45, 88}, {76, 54, 90, 69},{...

给出一百分制成绩,要求输出成绩等级
a =sc.nextInt();\/\/3.判定输出学生成绩等级if(a<= 90||a<100){System.out.println("优");}else if(a>=80){System.out.println("良");}else if(a>=70){System.out.println("中等");}else if(a>=60){System.out.println("合格");}else if(a<0){ System.out.println("...

用C语言编写程序:从键盘输入10个学生的成绩,输出其最大值、最小值、和...
scanf("%lf",&a[i]);} for(int i=0;i<10;i++){ sum+=a[i];i==0?max=a[0],min=a[0]:(maxa[i]?min=a[i]:NULL);} printf("所有元素的平均值为:%lf\\n",sum\/10);printf("最大值是%lf\\n",max);printf("最小值是%lf\\n",min);} ...

怎样利用c语言编写一个程序在一个字符串数组中查找一个指定的字符并输出...
include<stdio.h> include<string> void main(){ char a[20],c; \/\/a[20]为字符串,c为要查找字符 int i,n[5],num = 0,j = 0; \/\/i,j为计数器,n[5]纪录下标,num记录个数 printf("请输入字符串(少于20个字符)\\n");gets(a);printf("请输入要查找字符:");scanf("%c...

用c语言设计一个程序统计一个班的学生成绩
printf("学生平均分数情况:\\n"); avg(); \/\/每个学生的平均分 printf("功课平均分数情况:\\n"); tavg(); \/\/每门功课的平均分 printf("最高分数即对应学生功课:\\n"); maxsc(); \/\/最高分对应的学生和功课 system("PAUSE"); return 0; } 李金毅 | 学生 | 发布于2015-10-29 举报| 评论...

C语言实现文件排序
printf("After the quick sort---\\n"); PrintArray(arr, N); #endif system("PAUSE"); return...fscanf(fp,"%s %f",sts[n].name,&sts[n].sc); } fclose(fp); qsort(sts,i,sizeof(stdinf

余杭区14785111175: 关于scanf函数和printf函数的用法与区别(菜鸟级提问!!) -
逯贝吉巨: 1.区别:scanf与printf函数一样,都被定义在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>.它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中.而printf()函数是格式化输出函数, 一般用于向...

余杭区14785111175: 在c语言中scanf函数和printf函数具体怎么用,还有这两者的区别是什么? -
逯贝吉巨: 1.如scanf("%d",i)中只要前面是%d,后面i不管是什么类型?都按指定的格式(整形)输出? 2.如printf("%d",i)中i必须是前面规定的类型(整型)? 如果我直接printf(i)就不对?假设对的话,这个意思就是输出变量名i?] 而printf("%d",i)就是输出变量值的意思? 那么第一个"%d"就是帮助程序(或者格式化)获取一个需要的类型的值? 那么第二个"%d"就是告诉计算机输出的变量的值是个整形?

余杭区14785111175: 求printf和scanf的具体用法以及举例 C语言 二级考试 -
逯贝吉巨: print();将数据进行格式化输出,要写明白输出的数据的类型 比如:int num=1; printf("%d", num); 输出一个整数 有比如 double num1 =0.4; printf("%f", num1); 输出一个小数.而且格式化类型个数与输出个数要相等 比如:int num=1; ...

余杭区14785111175: scanf和printf有什么区别?怎么应用? -
逯贝吉巨: scanf();是格式输入函数.scanf("格式控制字符串",地址表列);例如:scanf("%d",&a);printf("a=%d",a);希望能帮得到你.如果学c遇到不懂就到百度搜搜,会有很多的相关知识.

余杭区14785111175: 你能告诉我scanf和printf怎么用吗?
逯贝吉巨: scanf用于输入 假设输入char字符,可以: char c; scanf("%c",&amp;c); 这里%c就是针对单个字符输入的. 假设要输入整数: int n; scanf("%d",&amp;n); long int m; scanf("%ld",&amp;m); 输入浮点数: float a; scanf("%f",&amp;...

余杭区14785111175: 跪求C语言高手详解printf、Int、scanf 在程序中的意义及用法.
逯贝吉巨: printf 这个代表输出语句 scanf 这个是输入语句,也就是从键盘上输入字符Int 这个是定义一个整型的数字 不知道你懂了么

余杭区14785111175: 使用scanf和printf函数进行赋值和输出怎么用 -
逯贝吉巨: scanf 代表输入 printf 代表输出 scanf(“格式化字符”,变量地址);printf(“格式化字符”,变量);double gongzi = 0; 工资变量 printf("请输入本月的工资(5000元至8000元)\n");scanf(“%lf”,&gongzi); gongzi = gongzi - (gongzi-3500)*0.1-105; printf("本月实际收入为%lf\n",gongzi);

余杭区14785111175: C++中printf和scanf函数怎么用? -
逯贝吉巨: #include <stdio.h>//包含头文件#include <conio.h> void main() { int num; printf("Please enter:");//输出一句话 scanf("%d",&num);//输入数据 printf("Yous enter is:%d",num);//输出用户的输入的数据 getch(); }

余杭区14785111175: 请问C语言的int,printf和scanf各代表什么意思? -
逯贝吉巨: 楼上的回答很直观.我再补充专业一点int 定义一个整形变量[数值在+32767到-32767之间]printf 打印,也叫输出.相当于 Cout<<scanf() 读入其中允许的字符并赋给对应字符数组.

余杭区14785111175: scanf和printf怎么使用?其中的格式说明符之间能有逗号吗? -
逯贝吉巨: scanf 标准出入函数;用法:scanf("%d”,&a); printf 标准输出函数;用法:printf("%d",a);

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网