C语言的学习
一、 输入与输出
C语言本身不提供输入输出的相应功能,C语言中的输入输出均由“C语言标准输入输出库”来提供
- printf:格式化输出函数
- 形式:printf(格式化字符串,参数列表)
- 格式化字符串:包含格式转换说明符的字符串
- 参数列表:往格式化字符串中替换的参数
- 格式转换说明符
- %d :表示输出一个十进制int整数
- %ld :表示输出一个十进制long类型的整型
- %u :表示输出一个十进制unsigned类型的整型
- %lu :表示输出一个十进制unsigned long类型
- %x(%X) :表示输出一个十六进制的整数(%#x :可以将十六进制前的0x一并打印出来)
- %o(%O) :表示输出一个八进制的整数(%#o :可以将八进制前的0一并打印出来)
- %c :表示输出一个char类型值
- %f :表示输出一个float/double类型值
- %lf :表示输出一个long double类型值
- %e :表示输出以科学计数法输出
- %s :表示输出一个字符串
- %p :指针地址
格式转换说明符输出类型一定要与后面的参数类型相匹配,如果不匹配,结果是未定义的;格式字符串中格式转换说明符数量一定要与后面的参数数量相匹配,如果不匹配,则结果是未定义的。
- 控制浮点数输出时的精度的位数
float num = 3.1415926f;
printf("%.7f", num); //结果将会输出3.1415926(小数点后7位)
- 控制输出的最小宽度
int nun1 = 12;
int num2 = 321;
int num3 = 1024;
printf("%4d", num1);
printf("%4d", num2);
printf("%4d", num3);
/* 结果会是
12
321
1024
printf其中的4是指输出的整型的宽度为4,如果宽度小于这个数,则就会像12那样,但如果大于这个数,则无影响*/
如果想要用参数来控制输出的宽度
int num = 1024;
int width = 6;
printf("%*d", width, num);
//输出是 1024
- scanf :格式化输入函数
- 按照指定格式在输入数据中解析需要的数据
- 注意:需要知道保存数据的变量的地址,所以在使用时需要有变量地址,在C语言中是在其之前加&;输入格式要与你自己定义的格式相匹配;scanf在匹配输入格式时是不用加上\n的;scanf在读取数据时自动跳过空格、制表符、换行;但是在匹配字符时是非常严格的(逗号就是逗号,空格就是空格);scanf()会在执行后返回一个整数值,表示成功读取到几个值;**scanf()中的格式字符串里面的格式转换说明符,绝大多数和printf中的相同,除了double在printf中是%f,在scanf中是用%lf。
当你输入完成之后,你输入的会暂存在输入缓存区,之后由scanf来读取。 所以在循环中如果前一次的输入的非法会拖到使后面的输入读取出现错误,可以使用以下
#include <stdio.h>
int main(void)
{
int a, c, i; //a,c表示输入的数;i是for循环中的
char b; //b为运算符号
for (i = 10; i > 0; i--)
{
printf("你还可以正确计算%d次\n",i);
fflush(stdin); //fflush(标准库中的函数)表示清理指定缓存区, stdin表示标准输入缓存区
printf("请输入表达式:");
scanf("%d%c%d", &a, &b, &c);
if (b == '-')
{
printf("差为:%d\n\n",a - c);
}
else if (b == '+')
{
printf("和为:%d\n\n",a + c);
}
else if (b == '*')
{
printf("积为:%d\n\n",a * c);
}
else
{
printf("本次输入有误\n\n");
i++;
}
}
return 0;
}
- putchar :输入一个字符
- getchar :输出一个字符
绝大多数的pc电脑在内存数据存储时,是使用小端存储的。小端存储:“高位”保存在“高地址”,“低位”保存在“低地址”。所以在不同的数据类型之间进行类型转换时,如果是向下转化 不会有问题;向上转化 会进行内存的截断或精度的丢失。