2.6.1字符变量的定义和输出
char的本质就是一个1字节大小的整型
#include<stdio.h>
int main(int argc,char *argv[])
//1、内存中没有字符,只有数字
//2、一个数字,对应的一个字符,这种规则就是ascii
//3、使用字符或数字给字符变量赋值是等级
//4、字符类型本质上就是1个字节大小的整型
//此文中出现单引号是为了方便,不加不影响运行
//字符:‘一个字符’
char ch=’a';
printf("ch1 =%c, ch = %d\n", ch, ch);
ch=97;//以ascii赋值,和ch='a'等价的
printf("ch2 =%c\n",ch);
效果:
//字符,原则上",内部只有一个字符,转义字符除外
//char a='abc';//不合理
//转义字符,由反斜杠\组成的多个字符
char ch='\n';//换行符
printf("ffff%c", ch);
2.6.4 数值溢出
2.7实型(浮点型):foat、double
·尽量不要使用,使用不准确
float存储不准确例子:
{
float a=100.9f;
printf("%f\n", a);
return 0;
}
float正确使用方法:
{
float a;
printf("请输入float:");
scanf("%f", &a);
printf("%f\n", a);
return 0;
}
double的使用方法:
{
double b;
b = 3.14;
printf("b = %lf\n", b);
return 0;
}
2.8 类型限定符
限定符 含义
extern 声明一个变量,sxtexm声明的变量没有建立存储空间。
const 定义一个常量,常量的值不能修改。const int a= 10;
volatile 防止编译器优化代码(加上这个,可以防止编译器跳过中间步骤)
register 定义寄存器变量,提高效率。register是建议型的指令,而不是 命令型的指令,如果 CPU有空闲寄存器,那么register 就生 效, 如果没有空闲寄存器, 那么register 无效。
2.9 字符串格式化输出和输入
2.9.1字符串常量
·定义:字符串是内存中一段连续的char空间,以‘\0'(数字0)结尾
每个字符串的结尾,编译器会自动的添加一个结束标志位’\ 0’,即"a”包含两个字符’ a' 和’\0’
2.9.2 prntf 函数和 putchar 函数
putchar是将内容输出到屏幕
输入之前:edu@edu:-/share/c code/day05$
输入:char ch = 'a';
putcahr(ch); //把ch的内容输出到屏幕
输出:aedu@edu:-/share/c code/day05$
实现换行:
输入char ch = 'a'
putchar(ch); //不可以输入putchar(“ch\n”)来实现换行,因为对于()内的是变量
//可以输入printf("\n“)来实现换行
putchar('\n');
2.9.3 scanf函数与 getchar函数
scanf:
输入:int a;
printf("请输入a:");
scanf("%d", &a);
printf("a = %d\n",a);
输出:请输入a:x
a = x
输入: int b;
int c;
printf("请输入b,c:")
scanf("%d %d",&b,&c);
printf("b = %d, c = %d\n",b,c);
输出: 请输入b, c:20 30 //此处输出时需要空一行
b = 20 c = 30
输入:char a;
printf("请输入字符a:");
scanf("%c", &a);
printf("a = '%c'\n:, a); //如果代码到这里,则会正常运行
char b;
printf(请输入字符b:);
scanf("%c", &b);
printf("b = '%c'\n", b); //如果代码到这里,则会只有上一步的代码正常运行
效果:
//知识点:此处当用户输入字符时,编译器默认把输入的内容先放在一块内存中(缓冲区),scanf()自动在缓冲区读完内容
键盘输入的会进入缓冲区
scanf("%c",&a); 只读一个字符
1、第1次把t取走,留下\n还在缓冲区
2、第2次scanf,由于缓冲区还有内容所以直接取内容,无需输入(相当于第二次把\n这个指令,也就是换行给读取了)
接下来进行第三次输入:
char c;
printf(”请输入字符c:");
scanf("%c, &c");
printf("c = '%c '\n", c);
输出:a = x
b = y
c = z
或者:把第二个命令的printf都给删去,为的是吃掉上一步的\n,不做处理
如下:
char b;
scanf("%c", &b );
getchar:
简单理解来说也是输入
a = getchar(); //读取键盘的字符,放在变量a(相当于scanf)
b = getchar;
c= getchar;
输入:char a ;
printf("请输入字符a:");
a = getcahr();
printf("c = '%c'\n, c");
输出: a = x