C 语言字符串与输入输出函数

字符串

字符串是一系列被视为一个处理单元的字符,在 C 语言中,字符串是以空字符位结尾的一系列字符,它存储在字符数组中。

C 预处理器

C 预处理器为预处理指令(以 # 符号开始)查找源代码程序,在开始编译程序之前处理它们,如 #include 指令、#define 指令。

printf() 和 scanf()

输入输出函数能让用户与程序交流,它们是输入输出函数,或简称 I/O 函数。

getchar() 与 scanf()

getchar 读取每个字符,包括空格、制表符和换行符;而 scanf 在读取数字时则会跳过空格、制表符和换行符。

代码示例

输出函数练习

#include<stdio.h>
#include<string.h>
//define 通过预处理器定义常量,编译时进行替换
#define PRAISE "You are an extraodinary being"   //编译器会在末尾加上空字符 \0
#define PAGES 959
#define BLURB "Authentic imitation"
#define PAGES 336
#define WORDS 65618
int main(void) {
	char name[40];                       //C 语言的字符串存储在字符数组中
	int a = 0;
	const double RENT = 3852.99;         //const 限定一个变量只读
	short num = PAGES;
	short mnum = -PAGES;
	float n = 3.0;
	double n1 = 3.0;
	long n2 = 2000000000;
	long n3 = 1234567890;

	printf("What is your name ?");
	scanf_s("%s",name,sizeof(name));     //输入时自动把空字符 \0 放入字符串末尾并只读一个单词
    printf("Hello,%s.%s\n", name, PRAISE);
	//strlen() 空字符不计入,sizeof() 空字符也会计算在内
	printf("strlen() = %zd,sizeof = %zd\n", strlen(name), sizeof(name));
	//printf 函数格式:printf(格式字符串,待打印项1,待打印项2,...);       
	//格式字符串包含每个待打印项对应的转换说明,用双引号括起来,
	//字段宽度打印整型时效果
	printf("*%d*\n", PAGES);
	printf("*%2d*\n", PAGES);            //字段宽度自动扩大以符合整数长度
	printf("*%10d*\n", PAGES);           //10个空格宽度
	printf("*%-10d*\n", PAGES);          //数字位于字段左侧
	//浮点型修饰符的组合
	printf("\n");
	printf("*%f*\n", RENT);              //宽度和为数为系统默认设置,6位
	printf("*%e*\n", RENT);              //科学记数法
	printf("*%4.2f*\n", RENT);           //最小宽度 4,保留 2 位小数
	printf("*%3.1f*\n", RENT);           //四舍五入,最小宽度 3,保留 1 位小数
	printf("*%10.3f*\n", RENT);          //最小宽度 10,保留 3 位小数
	printf("*%10.3E*\n", RENT);          //科学记数法
	printf("*%+4.2f*\n", RENT);          //代数符号 +
	printf("*%010.2f*\n", RENT);         //第一个 0 是标记,小数点之前指定字段宽度
	//格式标记
	printf("\n");
	printf("%x  %X  %#x\n", 31, 31, 31); //十六进制数,带符号十六进制数
	printf("%5.3d,%5.3f\n", 6, 6.0);     //整数保留三位,小数点后保留三位
	printf("%05d,%05.3d\n", 6, 6);       //0 标记用 0填充字段宽度,0与精度出现会被忽略
	//字符串格式
	printf("[%2s]\n",BLURB);             //字段被扩大容纳字符串中所有字符
	printf("[%24s]\n", BLURB);           //24 宽度
	printf("[%24.5s]\n", BLURB);         //只打印 5 个字符
	printf("[%-24.5s]\n", BLURB);        //左对齐打印五个字符
	//转换格式打印
	printf("-num %hd,unsigned short %hu\n", mnum, mnum);  //无符号打印 65536 - 336
	printf("num as char:%c\n", num);      //取后 1 个字节,除以 256 余 80 是字符 P
	printf("%ld  %ld  %ld \n", n,n1,n2);   //n,n1,n2 顺序存放栈内,根据转换类型取字节
	return 0;
}

在这里插入图片描述
输入函数练习

#include<stdio.h>
int main(void) {

	//scanf() 读取基本变量类型前加 &
	//        字符串读入字符数组中不加 &
	int age;
	float assets;
	char pet[30];
	double number = 256.6;
	int width;
	printf("Enter your age,assets,and favorite pet.\n");
	scanf_s("%d %f", &age, &assets);
	scanf_s("%s", pet,20);
	printf("%d $%.2f %s\n", age, assets, pet);
	//printf() 函数中用 * 修饰符代替字段宽度
	scanf_s("%d", &width);
	printf("number = %*.*f\n", width, width, number);
	//scanf() 函数中 * 修饰符是跳过相应的输出项
	scanf_s("%*d%*d%d", &width);
	printf("The last integer was %d\n", width);
	return 0;
}

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章