注释
注释是编写程序时,写程序的人给一个语句、程序段、函数等的解释或提示,能提高程序代码的可读性。
注释只是为了提高可读性,不会被计算机编译。
第一种注释方式【推荐】
使用//
对当前行//
后的内容进行注释
int a = 10; //定义了一个变量a并赋初值为10
第二种注释方式
使用/*
和*/
配对,对其中的内容进行注释。
【注意】/*
遇到第一个*/
就结束注释。(不支持嵌套注释)
int main(){
/*
* 项目名称:Hello World
* 项目简介:使用C语言程序输出Hello World!
*/
printf("Hello World!");
return 0;
}
输入
scanf()
C语言中,可以使用scanf()函数进行输入操作。scanf()函数就保存在stdio.h(标准输入输出头文件)中。
scanf()函数的功能是按照指定的格式输入数据,可以输入任意类型的多个数据。
scanf()函数的一般格式如下:
scanf(格式控制,地址列表);
因为输入的数据需要存储到变量中,所以我们需要什么类型的数据,就需要提前定义好变量。
int main(){
int a;
scanf("%d",&a);
return 0;
}
这里的%d
,可以理解为十进制的占位符。&
是取地址符。&a
就是变量a的地址。
整型
输入整型时,除了%d(十进制占位符),还有%o
(八进制占位符),还有%x
(十六进制占位符)。
scanf("%d",&a); //输入一个十进制整数存放到变量a中
scanf("%o",&b); //输入一个八进制整数存放到变量b中
scanf("%x",&c); //输入一个十六进制整数存放到变量c中
浮点型
输入单精度浮点型(float)时,使用%f
占位。
int main(){
float a;
scanf("%f",&a);
return 0;
}
输入双精度浮点型(double)时,使用%lf
占位。
int main(){
double a;
scanf("%lf",&a);
return 0;
}
字符
输入字符(char)时,使用%c
占位。
int main(){
char a;
scanf("%c",&a);
return 0;
}
字符串
输入字符串时,使用%s
占位。
int main(){
char a[10];
scanf("%s",&a);
return 0;
}
一行多个输入
推荐使用
(空格)来分开占位符。
int main(){
char a[10];
int b;
scanf("%s %d",&a,&b);
return 0;
}
更多个输入
int main(){
char a[10];
int b,c,d;
float e;
scanf("%s %d %d %d %f",&a,&b,&c,&d,&e);
return 0;
}
【注意】多个输入时,请注意占位符和变量的类型是否相配。
gets()
输入字符串,除了scanf()函数,还有更简单的gets()函数。
int main(){
char a[10];
gets(a);
return 0;
}
定义一个字符数组a,然后将变量a放入gets()函数,就可以输入字符串了。
【注意】在scanf()函数输入字符串时,空格后面的就无法读取了,而gets()输入的字符串中就算有空格也可以读取后面的内容。
gets(a)
完全可以取代scanf("%s",&a);
。
此外,使用gets()函数时,系统会将最后“敲”的换行符从缓冲区中取出来,然后丢弃,所以缓冲区中不会遗留换行符。这就意味着,如果前面使用过 gets(),而后面又要从键盘给字符变量赋值的话就不需要吸收回车清空缓冲区了,因为缓冲区的回车已经被 gets() 取出来扔掉了。
int main(void)
{
char str[30];
char ch;
gets(str);
printf("%s\n", str);
scanf("%c", &ch);
printf("ch = %c\n", ch);
return 0;
}
而如果使用scanf()函数输入完字符串后,会在缓冲区中留下一个字符'\n'
。导致第二次输入的变量ch
直接赋值为\n
,即换行。
输出
printf()
printf()函数可以直接输出字符串。
printf("Hello World");
但是当输出的字符串中含有变量的时候,就需要占位符。
int main(void)
{
int age = 18;
printf("我的年龄是%d岁 ",age);
return 0;
}
占位符 | 输出内容 |
%d | 十进制整数 |
%o | 八进制整数 |
%x | 十六进制 |
%f | 单精度浮点数float(默认输出六位小数) |
%lf | 双精度浮点数double(默认输出六位小数) |
%c | 字符 |
%s | 字符串 |
从表中可以看出,%f和%lf都是默认输出六位小数。所以,当需要指定输出小数位的时候,就可以使用占位符的修饰符。
对于单精度浮点数,只需要%.小数位f
就可以了。例如输出两位小数
int main(void)
{
float pi = 3.1415926;
printf("%.2f",pi);
return 0;
}
对于双精度浮点数,只需要%.小数位lf
就可以了。例如输出两位小数
int main(void)
{
float pi = 3.1415926;
printf("%.2f",pi);
return 0;
}
如果需要浮点数指定宽度的话,只需要在%宽度lf
就可以。(需要指定的宽度大于数的宽度,否则没有效果)
例如:(3.141592占8个字符,指定宽度为4的话就和没有指定宽度一样)
int main(void)
{
double pi = 3.141592;
printf("%4lf",pi);
return 0;
}
当指定宽度为10,超过变量的长度8时,前面就会空出两个字符的位置。
int main(void)
{
double pi = 3.141592;
printf("%10lf",pi);
return 0;
}
和浮点型一样,整型也支持设置宽度。(例如:变量age的长度时2,指定宽度为10,那么前面就会空8个字符的位置)
int main(void)
{
int age = 18;
printf("%10d",age);
return 0;
}
printf输出时的类型转换
整型的三种之间可以互相转换。比如定义的十进制的age,可以以八进制形式输出。
int main(void)
{
int age = 18;
printf("%o",age);
return 0;
}
输入八进制的age,可以以十六进制形式输出
int main(void)
{
int age;
scanf("%o",&age);
printf("%x",age);
return 0;
}
另外,整型可以和字符之间在输出时互相转换。(需要对照ASCII码表)
例如:十进制的65通过%c
转换为字符A
输出
int main(void)
{
int age = 65;
printf("%c",age);
return 0;
}
字符A
通过%d
转换为十进制的整数65
int main(void)
{
char age = 'A';
printf("%d",age);
return 0;
}
puts()
puts()函数可以直接输出字符串,并且换行。
puts("HelloWorld");
相当于printf("HelloWorld\n");
puts()函数也可以输出字符数组名,字符串常量和字符指针变量名。
字符数组名的使用
int main(void)
{
char age[5] = "中国";
puts(age);
return 0;
}
【拓展】一个汉字占两个字符位置,因为字符串默认末尾增加\n
占一个字符位置,所以储存两个汉字占5个位置。
字符串常量的使用
int main()
{
puts(NAME);
return 0;
}
字符指针变量名的使用
int main()
{
char *p = "hello";
puts(p);
return 0;
}