首页 > 编程知识 正文

scanf printf格式化输入输出,当程序中使用printf和scanf等输入输出函数时

时间:2023-05-04 10:49:24 阅读:208923 作者:3833

格式控制输入输出SCANF和PRINTF

C++语言兼容C语言中的基本语句语法。scanf和printf是C语言中的输入输出函数(语句),在C++语言环境中也可以使用。

"f"是format(格式)之意,就是要按照指定的格式输入输出值,所以,又称为格式输入输出函数。

对于大数据的输入输出,使用scanf和printf,比C++中的输入输出流语句(cin和cout)效率更高、速度更快。

scanf和printf是标准库的函数,使用前需要加上<cstdio>头文件。

1#printf函数

printf函数的格式为:printf(格式控制字符串,输出列表);

格式控制字符列表

格式字符说明%d以十进制形式输出带符号整数,正号不输出%o以八进制形式输出无符号整数,不输出前缀0%x,%X以十六进制形式输出无符号整数,不输出前缀0x%u以十进制形式输出无符号整数%c以字符形式输出一个字符%s输出字符串%f,%lf以小数形式输出单、双精度浮点数,隐含输出6位小数e,%E以指数形式输出实数%l加在格式符d、o、x、u前,用于长整型数据

使用说明:

1)输出整数形式可以用%d或%md,m为指定的输出字符的宽度,输出数据右对齐。

2)输出长整型可以用%ld,一个int型数据可以用%d或%ld格式输出。

3)输出字符串用%s,如printf("%s", "hello");。

4)%ms,输出的字符串占m列,如字符串本身长度大于m,则突破m的限制,将字符串全部输出;若串的长度小于m,则左补空格。

5) “%-ms”,若串长小于 m,则在 m 列范围内,字符串向左靠,右补空格。

6) “%m.ns”,输出占 m 列,但只取字符串中左端 n 个字符。这 n 个字符输出在 m 列的右侧,左补空格。

7) “%-m.ns”,m、n 含义同上,n 个字符输出在 m 列范围的左侧,右补空格,如果 n>m,则 m自动取 n 值,即保证 n 个字符正常输出。

8) “%m.nf”,输出浮点数,占 m 列,其中有 n 位小数,如果数值长度小于 m,则左补空格。

9) “%-m.nf”,同上,只是使输出的数值向左端靠齐,右端补空格。

示例,上机实验:

//p2-10-1#include<cstdio>using namespace std;int main(){ printf( “ %d ” ,1); // 输出 1 printf( “ %o ” ,8); // 输出 10 printf( “ %x ” ,17); // 输出 11 printf( “ %u ” ,12); // 输出 12 printf( “ %c ” ,49); // 输出 1 printf( “ %s ” , ” 1ab11 ” ); // 输出 1ab11 printf( “ %f ” ,0.14); // 输出 0.140000 printf( “ %e ” ,0.1); // 输出 1.000000e-001 printf( “ %lld ” ,21473648); // 输出 21473648} 2#scanf函数

scanf 函数的格式为:

scanf(格式控制字符串 , 地址表列);

scanf 的作用是输入指定形式的数据。其中,地址列表可以是变量的地址,也可以是字符串的首地址。

​ 例如:int a,b;

​ scanf(“%d,%d”,&a,&b);

就表示先在内存中各开辟4个字节空间给a和b,当遇到scanf语句时,就把键盘上输入的2个数依次存入a、b所在的空间(及地址中)。“&a”就表示取a变量的地址,“&”称为取地址符。简而言之,就是先找地址后放值。

使用scanf函数时,需要注意以下几个问题:

(1)如果在格式控制字符串中有其它字符,则运行程序输入数据时,对应的位置也要输入这些相同的字符。

例如:scanf(“%d,%d”,&a,&b);

​ 键盘输入应该是“3,4”,而不能是“3 4”。

(2)scanf函数输入时可以过滤掉不想读入的字符。

例如:scanf(“%d+%d+%d”,&a,&b,&c);

键盘输入:1+2+3

则scanf可以无视“+”,使得a,b,c的值分别为1,2,3。

再如:scanf(“%3d %*3d %2d”,&m,&n);

键盘输入:113 118 69

则m,n的值分别为113,69,因为“*”表示跳过相应数据。

#include <cstdio>#include <string>using namespace std;int main(){ int a; double b; long c; char d; char s[101]; scanf("%d", &a); scanf("%f", &b); scanf("%d", &c); scanf("%c", &d); scanf("%s", &s); return 0;} 3#scanf、printf 与 cin、cout 的比较

cin 是输入流,cout 是输出流,重载了“>>”“<<”运算符,包含在头文件 中。

cin 代表标准输入设备,使用提取运算符“>>”从键盘取得数据,送到输入流对象 cin 中,然后送到内存。cin 是自动判断变量类型,比如一个 char 数据只能用默认的 char 方法取数据。

cout 先把要输出的东西存入缓冲区,遇到“endl”或者“return 0”再输出并刷新缓冲区,导致效率降低。

scanf 是格式化输入,printf 是格式化输出,包含在头文件 中。因为scanf是用指针操作的,没有类型安全机制,比如对于一个char类型数据,你就可以用“%f”获得输入,而不会报错,但在运行时会出现异常。scanf()函数取数据时遇到回车、空格、TAB就会停止。

printf输出效率比较高,但是编写代码相对而言麻烦一些。

4#练习

利用scanf输入三角形三边,计算三角形面积,并用printf输出,结果保留两位小数。如不能构成三角形,则输入 “No” 。

输入样例

3 4 5

输出样例

6.00

#include<cmath>#include<cstdio>using namespace std;float a,b,c;double p,s;int main(){ scanf("%f%f%f",&a,&b,&c); if( a + b > c && a + c > b && b + c > a ) { p = (a+b+c)/2; s = sqrt(p*(p-a)*(p-b)*(p-c)); printf("%.2fn",s);}else printf("No"); return 0;}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。