20150331输入输出printfscanf

Posted wzg31796

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20150331输入输出printfscanf相关的知识,希望对你有一定的参考价值。

一.cghelloworld用网页输出内容


二.printf初步

1.printf可以输出到文件,输出到命令行,输出到网页


2.sprintf输出到字符串

<span style="font-size:24px;">void main() 

	char input[100] =  0 ;
	scanf("%s", input);	//输入,初始化input

	char str[100] =  0 ;

	sprintf(str, "color %s", input);

	system(str);

	system("pause");

</span>

3.%[-][0][m][.n][l]格式字符

附加格式说明字符

说     明

  -


0(数字)

m(一个正整数)


.n(一个正整数)

l(字母)

输出的数字或字符以左对齐,右边填空格。


输出的空位用0填充。

输出数据的字段宽度。如果实际位数多于m,按实际位数输出;如果实际位数少于m,则补以空格或0。

对实数,表示输出n位小数;对字符串,表示截取的字符个数。

输出长整型整数


4.输出格式


5.%d格式字符

%d:按整形数据实际长度输出


%[0]md:以m指定的字段宽度输出,如果数据的位数小于m,则左端补空格,若m前面有0,则左端补0


%-md:以m制定的字段宽度输出,左对齐


%ld输出长整型数据


6.字符串加法(拼接)

%s%s拼接
%.5%s截取 (从左边截取,如果要从右边截取可以把字符串数组+要截取第几位,这样指针直接指到那位)


7.s格式符

%s:直接输出字符串

%ms:输出字符占m列,右对齐

%-ms:输出字符占m列,左对齐

%m.ns:输出字符串前n个字符,占m列,右对齐

例:printf("%3s,%-6s,%-5.2s,%4.3s,%.4","hello","hello","hello","hello","hello"); 结果为:hello,hello_,he___,_hel_,hell; (_代表空格)


8.o、x、u格式符

%[-][0][m][l]o(x或u)

将内存单元中的二进制数(包括符号位)直接

转换成八进制数、十六进制或十进制数输出

例:

<span style="font-size:24px;">int a=-1;
printf("%d,%o,%x,%u",a,a,a,a);
输出为-1,37777777777,ffffffff,4294967295</span>


9.f格式符

%[-][0][m][.n]f

%f:整数部分全部输出,小数部分输出6位(用四舍五入或右边补0满足小数位数)。

%m.nf:输出数据共占m列,小数占n位,右对齐

%-m.nf:输出数据共占m列,小数占n位,左对齐

例:

floatf=3.456;

printf("%f,%7.2f,%-7.2f,%7f,%.2f",f,f,f,f,f);

输出结果为:

3.455994,__ _3.46,3.46_ _ _,3.455994,3.46


10.%[-][0][m][.n]e

%e:输出数据共占13位,其中整数部分为1位非零数字,小数点占1位,小数部分为6位,指数部分e1位,指数符号占1位,指数为3位。若输出数据为负数,还应增加一位整数部分的符号位。


11.%g

根据数值的大小,自动选择用f格式或e格式输出实数。输出时选择占宽度较小的一种,且不输出无意义的零。

例:

<span style="font-size:24px;">floatx=12.345;
printf("%f,%e,%g",x,x,x);
输出结果为:12.345000,1.234500e+001,12.345</span>

三.printf加强

1.%hd,整数,短整数,16个位的存储 short范围

%d,%ld等价,&u %lu等价


%lld %llu 超长的数据


2.如果想把进制表示位(o,0x)也打印到屏幕,可以加#;例:printf("\\n%#x",data);

3.printf中出了X、E、G可以大写,其他字符不可以大写,X的大小写决定了输出的大小写


4.转义字符

printf("\\"123\\"");

printf("\\'123\\'");

printf(\\n 55%%");


5.可以用*控制输出多少位,让小数点位置变动的变化,代码如下,i是变化的

<span style="font-size:24px;">double db=1.1213234554466878954;
for(int i=1;i<100;i++)

printf("%.*f",i,db);
</span>

四.scanf简介

1.scanf要匹配内容

如:scanf("num=%d",&num); 如果只输入数字则不能获取到值,应该输入num=数字


2.可以用*跳过不需要获取的字符,如下,只获取年龄和升高

<span style="font-size:24px;">void main()

	char str[500] = "131610	陈小姐	女	40	165	高中	未婚	朝阳	双子座	在校学生	普通话	北京	面议元/天	有过几次	学生伴游	清纯漂亮 自信可爱的我独在北京上学.在这浪漫的季节偶尔来到这里寻找我的有缘人.愿我们的相聚能留下人生中最美好的回忆!	10:00—23:00		2264938779@qq.com		226493870779";
	
	
	int age;
	int tall;
	sscanf(str, "%*d %*s %*s %d %d ", &age, &tall);//挖掘
	printf("age=%d,tall=%d\\n", age, tall);

	(age >= 海华中意的年龄) && (tall <= 海华中意的身高) ? printf("海华买单") : printf("换下一个");


	system("pause");


</span>

3.在用scanf读数据或文件时,可能文件中会有不同字符(如逗号,字符串不会把逗号当做结束符)影响scanf获取数据,就需要对文件进行预处理,例:

<span style="font-size:24px;">void  main3()

	char str[500] = "刘海华,420111197203024016,13600477059,nixiaodong@vip.sina.com";
	for (int i = 0; i < 500;i++)
	
		if (str[i]==',')
		
			str[i] = ' ';
		
	

	char name[100] =  0 ;
	long long selfid;
	long long mobile;
	char email[100] =  0 ;

	sscanf(str, "%s %lld %lld %s", name,&selfid, &mobile, email);

	printf("%s     \\n    %lld     \\n %lld    \\n  %s",name, selfid, mobile, email);


	system("pause");



</span>


五.scanf补充

1.获取字符串可以加数字表示要获取多少字符,例:

<span style="font-size:24px;">void  main2()

	char str1[100] =  0 ;
	char str2[100] =  0 ;
	scanf("%*3s%5s", str1, str2);//固定长度截取,*忽略
	printf("%s,%s", str1, str2);
	system("pause");

</span>

2.获取实数则不能指定精度,不能指定要获取多少字符,错误示例:

<span style="font-size:24px;">void  main3()


	float fl=0;
	scanf("%7f", &fl);//实数不可以指定精度
	printf("fl=%f", fl);

	system("pause");


</span>


3.不写地址符,会把整数的值当作地址
<span style="font-size:24px;">void  main4()

	int num = 0;
	scanf("%d", &num);//不写地址符,会把整数的值当作地址

	system("pause");

</span>


4.精确匹配,不可以遗漏

<span style="font-size:24px;">void main5()

	int num=0;
	scanf("#num=%d", &num);//精确匹配,不可以遗漏
	printf("%d", num);
	system("pause");

</span>

5.回车会被当作一个输入

<span style="font-size:24px;">void  main6()


	char ch1, ch2, ch3;
	scanf("%c%c%c", &ch1, &ch2, &ch3);
	printf("[%c][%c][%c]", ch1, ch2, ch3);//回车会被当作一个输入
	system("pause");


</span>


6.字符串必须空格或者回车

<span style="font-size:24px;">void  main7()

	int num1;
	int num2;
	int num3;
	char str[100];
	scanf("%s%d%d%d",str, &num1, &num2, &num3);
	printf("%s,%d,%d,%d", str, num1, num2, num3);//字符串必须空格或者回车

	system("pause");
</span>

7.%%scanf代表一个实际的%

<span style="font-size:24px;">void  main8()


	int num1;
	int num2;
	int num3;
	//%%scanf代表一个实际的%
	scanf("%d%%%d%d", &num1, &num2, &num3);
	printf("%d,%d,%d",  num1, num2, num3);//

	system("pause");
</span>

8.字符串必须空格或者回车
<span style="font-size:24px;">void  main10()

	int num1;
	int num2;
	int num3;
	char str[100];
	int n;
	scanf("%s%n%d%d%d", str,&n, &num1, &num2, &num3);//统计字符数量
	printf("\\n%s,%d,%d,%d", str, num1, num2, num3);//字符串必须空格或者回车
	printf("\\nn=%d", n);

	system("pause");
</span>


9.以某个字符结束


例:

<span style="font-size:24px;">void  main()

	char str[100];
	//scanf("%s", str);
	//scanf("%[^\\n]", str);//只有\\n当作结束

	scanf("%n[A-Z]", str);//只有\\n当作结束
	printf("%s", str);

	system("pause");
</span>


七.输入输出小结

1.puts用法

<span style="font-size:24px;">#include<stdio.h>
#include <stdlib.h>


void main1()

	puts("Content-type:text/html\\n\\n");//代表网页HTML开头
	puts("1234<br><br>");//自动换行
	puts("1234<br><br>");//输出字符串 ,网页用<br><br>换行
	putchar('A');
	putchar(65);
	putchar('A'+32);




	//getchar();
</span>

2.gets用法
<span style="font-size:24px;">#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

void main()

	char str[100];
	gets(str);//直接输入初始化一个字符串

	system(str);
	//char ch = getchar();
	//putchar(ch);

	system("pause");


</span>


八.位运算

1.^代表异或,11=0;00=0;10=1;01=1,任何数与0异或不变,任何数与1异或反转


2.两个数异或相当于一个数减另一个数


3.一个数异或两次则等于这个数本身,可用此方法加密


4.~取反


5.位运算没有改变原来的值,计算的中间结果在cpu,之后才把结果赋值给在内存的变量

void main11()

	unsigned char ch1 = 1; //0000 0001
	unsigned char ch2 = 3; //0000 0011
	ch1 &= ch2;  //ch1=ch1 &ch2' //寄存器结果赋值给内存
	ch1 ^= ch2; //ch1= ch1^ch2
	ch1 |= ch2;
	ch1 <<= ch2;
	ch1 >>= ch2;//复合赋值运算符
	printf("%d", ch1);

	getchar();




九.printfscanf返回值

1.int num=printf("%d",1234);  printf返回的是输出的数据个数(纯字符情况下)


1.int num=scanf("%d",&a);  把scanf赋值给num,scanf的返回值是成功获取到多少数据


十.scanf正则表达式用法:

scanf("%[^\\n]",str);  以回车作为输入结束符
scanf("%[^=]",str);  以等号作为输入结束符
scanf("%[1]",str);  遇到第一个不是1的字符结束,只接受1
scanf("%[A-Z]",str);  遇到第一个不是A-Z的字符结束,只接受大写字母A-Z
scanf("%[1]",str);  遇到第一个是A-Z的字符结束,只接受不是A-Z的字符
scanf("%[a-zA-Z]",str);  遇到第一个不是字母的字符结束,只接受字母

void main1()


	char str[100] =  0 ;
	//scanf("%s", str);//空格当作结束
	//scanf("%[^\\n]", str);//处理空格,以回车当做结束符
	//	scanf("%[^,]", str);
	scanf("%[^,]", str);//,#  =作为结束符

	printf("str=%s", str);
	system("pause");


十一.内存实体优先级

1.&取地址,位运算,++--等操作都在寄存器,而不是在内存



以上是关于20150331输入输出printfscanf的主要内容,如果未能解决你的问题,请参考以下文章

c语言输入任意5个实数,按照由大到小排序输出?

输入三个实数,编程判断他们是不是能构成三角形

java实现用户从键盘输入两个实数,输出它们的和

编写一程序,从键盘输入10个实数,计算并输出算术平均数

圆的面积

蓝桥杯-入门训练