C语言学习笔记(重温要点五)

五.输入输出函数
1.输入scanf
(1)scanf函数双引号中不能出现\n否则需要多输入一次数据,且此数据无用。
(2)&符号不能省略。注意变量列表中,应该是变量的地址。变量的地址通过求地址符&得到。所以在写代码时千万要记住&符号。
(3)如果格式字符串中有非空白字符,也就是除了格式控制字符和空白字符之外的字符,则用户在输入的时候一定也要输入这些字符。否则将出现不匹配格式控制字符串的情况。为了使用户正确输入,编程时一定要考虑到用户是否清楚如何输入,最好在需要用户输入前提示如何输入的格式。
(4)在用%c格式符时,空格字符与转义字符都被当作有效字符输入:

char c1, c2, c3;
scanf("%c%c%c", &c1, &c2, &c3);
printf("[%c][%c][%c]\n", c1, c2, c3);

(5)以回车作为下达开始解析命令。整个输入以回车结束。如果输入的数据满足了scanf对需要,则输入结束,如果回车后数据不够,则回车只当作一个空白符。
(6)scanf解析数据,下列情况认为解析出来一个数据:读入非字符型数据时,遇到空白字符;有宽度指示时,读入到相应的宽度,如%3d只解析3个数字即认为读入这个整数完毕。
getchar字符输入
(7)输入数据不能指定精度,宽度和小数点后位数,加上后scanf函数无效。

#define _CRT_SECURE_NO_WARNINGS   //关闭安全检查
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>//极限的头文件
#include<float.h>//浮点数极限值存放的头文件
#include<stdbool.h>//支持C语言的bool类型变量
#include<windows.h>
#include<locale.h>
#include<math.h>

/1scanf初始化整型数据/

void main1()
{
	int num;
	int a, b, c,d,e,f,g;
	//scanf("%d", &num);//scanf通过地址,将键盘输入转换成数据进行赋值。
	%d按照整数来解析,传入num的地址,就根据地址对num初始化赋值。
	格式符和printf函数类似,格式字符串以%开始,以一个格式字符结束,中间可以插入附加的字符。
	//printf("%d\n", num);
	//scanf("%d%d%d", &a, &b, &c);//输入多个数据,可以用空格、TAB键、回车键分隔,最后一定要回车
	//printf("a=%d,b=%d,c=%d\n", a, b, c);
	//scanf("%d,%d,%d,%d,%d,%d", &a, &b, &c,&d,&e,&f);//输入多个数据,可以用逗号分隔,输入时需注意必须加入逗号符,且区分其中英文,最后一定要回车
	//printf("a=%d,b=%d,c=%d,d=%d,e=%d,f=%d\n", a, b, c,d,e,f);
	//scanf("  %d%d %d  ", &a, &b, &c);//空白符在%前会被忽略,在格式符之间也会被忽略,在%结束的末尾会要求多输入数据,但不影响结果。
	使用scanf的时候,尽量不要使用空白符与非空白符。
	//printf("a=%d,b=%d,c=%d\n", a, b, c);
	//char c1, c2, c3;
	//scanf("%c%c%c", &c1, &c2, &c3);
	//printf("[%c][%c][%c]\n", c1, c2, c3);
	scanf("%3d", &num);
	printf("%d\n", num);	
	system("pause");
}

/2scanf初始化浮点型数据/

void main2()
{
	double db=1.0;
	scanf("%f", &db);//取地址进行初始化,%f没有生效
	printf("db=%f", db);
	scanf("%lf", &db);//双精度实数需要小写字母l,输入需是实数
	printf("db=%f", db);
	scanf("%le", &db);
	printf("db=%f", db);
	scanf("%lE", &db);
	printf("db=%f", db);
	scanf("%lg", &db);
	printf("db=%f", db);
	scanf("%lG", &db);
	printf("db=%f", db);
	scanf("%LG", &db);//L大小写都可以。
	printf("db=%Lf", db);
	system("pause");
}

/3getchar和gets/

void main3()
{
	char c = getchar();
	putchar(c);
	putchar('\n');
	char str[50];
	gets(str);
	system(str);
	system("pause");
}

/4scanf扫描集合/

void main4()
{
	char str[30] = { 0 };//定义字符串,全部初始化为字符‘\0’
	//scanf("%s", str);
	//printf("%s\n", str);
	//scanf("%[xyz]", str);//只接受xyz的输入,有一个不匹配就停止,即使后面还有xyz
	//printf("%s\n", str);
	//scanf("%[^xyz]", str);//接受xyz以外的字符
	//printf("%s\n", str);
	scanf("%[A-Z]", str);//接受A-Z的字符
	printf("%s\n", str);
	system("pause");
}

/5字符大小写转换/

void main5()
{
	char ch = getchar();
	(ch >= 'A'&&ch <= 'Z') ? ch = ch + 32 : ch;//大写转小写
	printf("%c\n", ch);
	(ch >= 'A'&&ch <= 'Z') ? ch = ch + 32 : ((ch >= 'a'&&ch <= 'z') ? ch -= 32 : ch);//大写转小写,小写转大写
	printf("%c\n", ch);
	system("pause");
}

/6统计输入输出字符数量百分号/

void main6()
{
	int num,data;
	scanf("%d%n", &data, &num);
	printf("%d,%d\n", data, num);
	//printf("hello%n china\n", &num);
	VS2013已经在printf中禁用了%n
	//printf("num=%d\n", num);
	system("pause");
}

/7百分号i输入输出/

void main7()
{
	int num;
	scanf("%i", &num);
	printf("%i\n", num);
	//%i与%d等价
	system("pause");
}

/8十六进制指数方式输出实数/

void main()
{
	float fl=2345.0;
	printf("%f\n", fl);
	scanf("%*f", fl);//%后面的*格式符用来表示在解析时将读入的数据忽略不赋值给任何变量
	printf("%a,%A\n", fl, fl);//十六进制指数形式输出
	system("pause");
}

C++中为cin

2.输出printf
printf(格式控制,输出表)
格式控制:用双引号括起来的格式控制转换字符串
输出表:输出表中的数据可以是合法的常量、变量和表达式,要与格式控制中的格式字符一一对应。
printf(“结果是:%d\n”,10);//由%后跟格式字符组成,将输出数据转换为指定格式输出;“结果是”字符串原样输出;“\n”转义字符,输出换行。
使用printf时一定要类型匹配。
同样的二进制数据,按照不同的解析方式就有不同的结果;不同的类型,解析方式不同。
printf第一个类型不匹配,转换失败,会造成第二个也失败,即使第二个也匹配。

/1整数输出格式/

void main1()
{
	int num = 123456;//正负数一致
	printf("%d\n", num);
	printf("%10d\n", num); //整数10指定打印数的宽度,大于实际数据的宽度则左端补空格。
	printf("%3d\n", num);//如果指定的数据宽度小于实际数据宽度则正常输出
	printf("\n%010d\n", num); //整数10指定打印数的宽度,0指大于实际数据的宽度时左端补0。
	printf("%03d\n", num);
	printf("\n%-10d\n", num);//-指数据左对齐。
	printf("%-3d\n", num);
	printf("\n%d\n", num);//32位操作系统中的整型和长整型是一样的,嵌入式系统会有所不同。
	printf("%ld\n", num);
	system("pause");
}

/2/

void main2()
{
	int x = -1;
	unsigned int y = -1;//-1不在unsigned int类型范围内,它的范围是大于等于0,此时就会直接将-1的二进制赋值过来,因此和x的效果相同。
	printf("%x\n", &x);
	printf("%d\t%u\t%o\t%x\n", x, x, x, x);
	//%d有符号位,所以解析为-1;
	//%u,%o,%x分别代表无符号十进制,八进制,十六进制,按照无符号解析就全是数据没有符号。
	//在输出的时候按照指定的形式输出,不管当初声明的时候的类型。
	printf("%x\n", &y);
	printf("%u\t%d\t%o\t%x\n", y, y, y, y);
	system("pause");
}

/3不同进制下的输出格式/

void main3()
{
	int num1 = 10;
	int num2 = 010;
	int num3 = 0x10;	
	printf("%d\t%d\n", sizeof(int),sizeof(unsigned int));//4	4
	printf("%d\t%d\n", sizeof(short), sizeof(unsigned short));//2	2	
	printf("%d\t%d\t%d\n", num1, num2, num3);
	printf("%i\t%o\t%x\n", num1, num2, num3);
	printf("%i\t%#o\t%#x\n", num1, num2, num3);
	//%#o按照八进制输出带0
	//%#x按照十六进制输出带0x
	system("pause");
}

/4字符与字符串输出格式/

void main4()
{
	char str[] = "hello world";
	//字符
	printf("%c%c%c%c%c %c%c%c%c%c\n", 'h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd');
	printf("%c%c%c%c%c %c%c%c%c%c\n", 104, 101, 108, 108, 111, 119, 111, 114, 108, 100);
	printf("%c%c%c%c%c%c%c%c%c%c%c\n", str[0], str[1], str[2], str[3], str[4], str[5], str[6], str[7], str[8], str[9], str[10]);
	//字符串
	printf("%15s\n", "hello world");//15为字符串宽度,宽度大于实际长度就补充空格
	printf("%5s\n", "hello world");//5为输出限定宽度,小于实际宽度按照实际长度输出
	printf("%-15s\n", "hello world");//-号表示字符串需要左对齐
	printf("%15.5s\n", "hello world");//输出字符串前5个字符,总共占15列,右对齐,结果为          hello
	printf("%15.3s\n", "hello world");//输出字符串前3个字符,总共占15列,右对齐,结果为            hel
	printf("%s\n", str);
	system("pause");
}

/5浮点数输出格式/

void main5()
{
	float fl = 1.2345f;
	double db = 5.43216789;
	printf("%f,%f\n", fl, db);//%f精确到小数点后面六位
	printf("%15f,%15f\n", fl, db);//15为限定宽度,宽度大于实际长度就在左边补充空格
	printf("%5f,%5f\n", fl, db);//5为输出限定宽度,小于实际宽度按照实际长度输出
	printf("%-15f,%-15f\n", fl, db);//-号表示左对齐
	printf("%.10f,%.10f\n", fl, db);//.10表示小数点后保留10位
	printf("%-15.10f,%-15.10f\n", fl, db);//左边对齐,数据总宽度15,小数点后保留10位
	
	system("pause");
}

/6指数输出格式/

void main6()
{
	printf("%e\n", 12.3);//1.230000e+001
	//输出数据共占13位,其中整数占1位,小数点占1位,小数部分占6位,
	//指数符号e占1位,指数占3位,如果输出为负值,还应增加一位整数部分的符号位。
	float fl = 1.2345f;
	double db = 5.43216789;
	printf("%e,%e\n", fl, db);
	double bigdata = 123456789101112131415.0;
	double smalldata = 0.00000123456789101112131415;

	printf("%15e,%15e\n", bigdata, smalldata);//15为限定宽度,宽度大于实际长度就在左边补充空格
	printf("%5e,%5e\n", bigdata, smalldata);//5为输出限定宽度,小于实际宽度按照实际长度输出
	printf("%-15e,%-15e\n", bigdata, smalldata);//-号表示左对齐
	printf("%.10e,%.10e\n", bigdata, smalldata);//.10表示小数点后保留10位
	printf("%-15.2e,%-15.2e\n", bigdata, smalldata);//左边对齐,数据总宽度15,小数点后保留2位
	printf("%015e,%015e\n", bigdata, smalldata);//15为限定宽度,宽度大于实际长度就在左边补充0
	printf("%05e,%05e\n", bigdata, smalldata);//5为输出限定宽度,小于实际宽度按照实际长度输出	
	system("pause");
	}

/7g格式符/

void main()
{
	float x = 12.345;
	printf("%f,%e,%g\n", x, x, x);
	//%g根据数值的大小,自动选择用f格式或e格式输出实数。
	//输出时选择占宽度较小的一种,且不输出无意义的零。
	system("pause");
}

putchar字符输出,需注意回车也是字符。
puts字符串输出
/11putchar和puts/

puts("hello world");//自动换行
putchar('h');
putchar('e');
putchar('l');
putchar('l');
putchar('o');
putchar(' ');
putchar('w');
putchar('o');
putchar('r');
putchar('l');
putchar('d');
putchar('\n');
putchar(110);
putchar('A' + 32);

3.sprintf()//格式化字符串输出

int sprintf(char *str, const char *format, ...);//发送格式化输出到 str 所指向的字符串。

C++中为cout

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值