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>
%[-][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位,指数部分e占1位,指数符号占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>
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>
<span style="font-size:24px;">void main4()
int num = 0;
scanf("%d", &num);//不写地址符,会把整数的值当作地址
system("pause");
</span>
<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>
<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>
例:
<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();
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的主要内容,如果未能解决你的问题,请参考以下文章