从零开始学编程---第一步-C语言(二)
在开始的时候大家就已看到printf()的功能
没错 就是printf("hello world \n");,打印字符串hello world到屏幕上
简单来说,printf()就是在屏幕上产生输出,把字符,数字,字符串发送到屏幕上
printf()的格式
printf(“”);可以直接输出引号里的东西
printf(“%d”,a) 这样是直接输出变量int类型a的值
%d的意思:d是decimal base(十进制)的开头字母,意思就是按十进制格式输出,也就是按整数格式输出
还有%f 按浮点数格式输出
%c 按字符格式输出
printf(“%d”,a)的逗号后面只能放值,变量名可以,单纯的值也可以,例如这样printf(“%d”,1),也是可以的
连续输出值可以这样printf(“%d,%f,%c”,a,b,c),引号里的逗号不打也没关系所以printf(“%d%f%c”,a,b,c)也是可以的,但是这样会挤成一堆,自己试下就知道了,所以建议大家养成打逗号的习惯
printf("hello world \n"); 里面的\n有什么用
下面我就来为大家介绍,\n今后我们会经常用的
下面看例子
#include <stdio.h>
main()
{
printf("hello");
printf("world");
}
输出结果会是
hello
world
吗?
结果是NO
输入结果是helloworld
因为没有回车,printf()只能在一行进行输出
那么怎么进行回车?这就需要\n了,\n是转义符,意思就是它能把你不能用字符打出来的东西,换种形式出来,在程序过程,你不可能中途又去按回车键
所以,这样
main()
{
printf("hello\n");
printf("world");
}
它就会输出
hello
world
转义符还有很多个,例如\t,\\,\*\a
\n只是其中一个,其他的等用的时候在介绍吧,反正常用的也就一两个
大家就只要牢记\n这一个,记住是反斜号,n是new-line (新的一行)的开头字母
现在我们来用我们所学的输出几个变量的值
#include <stdio.h> void main() { int a; float b; char c; a=1; b=1.1; c='a'; printf("%d\n",a); printf("%f\n",b); printf("%c",c); }
结果是
1
1.100000
a
为什么1.1变成了1.100000,因为float 定义的变量小数(浮点数)默认小数点后面保留6位数,那怎么让它输出1.1?
只让让%f变成%.1f就可以了,反之你想让它输出小数点后两位数就%.2f,三位就%.3f,以此类推
程序可以简化为
#include <stdio.h> void main() { int a=1; float b=1.1; char c=‘a’; printf("整数变量为:%d,浮点数变量为:%.1f,字符型变量为:%c\n",a,b,c); }
结果为
整数变量为:1,浮点数变量为:1.1,字符型变量为: a
\n记住一定要在引号里,为了美观,请养成多用\n的习惯,即使整个程序就一个printf()语句(也是也用的)
补充一点
其实转化字符不止%d %c %f等,字符串也有一个,就是%s string(字符串)的开头字母,但是用的少
尽管只打印字符串时可以不需要%S,但是当打印与其他数据组合的字符串时,就可能需要用%S
例如:
printf("%s %d %f %c","hello",14,7.2,'a');
打印结果如下
hello 14 7.200000 a
%s %d %f %c 这些是转化符,注意不能放到引号外,打印时要适当隔开,可以用空格或逗号隔开
printf("hello");
和
printf("%s\n","hello");
是一样的,显然用第一种更好
这里只能让大家了解一下%s的作用,不需深究,忽略也可
现在我们学会打印了(也就是输出了)
能在程序中打印变量的值了,但也只能打印我们事先在程序中写好的值,能不能在程序过程中自己手动用键盘输入变量的值,在打印出来呢?答案是肯定的
这时我们就要学习scanf()这个函数
一般在程序中,printf()和scanf()是一起使用的
scanf()的功能是从键盘获取数据,同样它也会用到转化字符%d,%f,%c
scanf()的格式如下
scanf("%d",&a);
让我们再看看printf();
printf("%d",a);
两个差不多把,只不过scanf()比printf()多了一个&,&是什么?&是取地址符
scanf("%d",&a); 意思就是你从键盘输入一个整型变量的值,它会自动存到变量a那个地址,也就是它会找到那么标记为a的盒子,然后把值放进里面
为什么printf()没&,因为它是直接输出,a变量的地址已经事先知道,而scanf() 变量a的值从外部获取,得先知道变量a的地址,知道地址你才好把值放进去
每个变量名都有对应的地址,变量名只是地址的别名,就好像外号一样,之所以用变量名而不用地址名,因为变量名比地址名好记,方便,而地址名是数字,你不可能知道什么是什么
扯远了,内存地址在学指针的时候你就会知道,现在先别管这些,知道太细反而越弄越糊涂,你现在就只需要知道scanf()的格式
scanf("%d",&a);
和print()差不多,但是变量名前一定要加&,除了scanf("%s",a);字符串格式就不需要,这也跟指针有关系,现在先别管,你只要知道除了%S,其他类型的变量都要在前面加&, 引号里面注意不要加\n,没必要
连续输入也是可以的,scanf("%d,%f",&a,&b);但目前先不要用
下面我们来个输入(scanf)输出(printf)的程序
#include <stdio.h> void main() { int a; float b; char c; printf("请输入a的值:"); scanf("%d",&a); printf("请输入b的值:"); scanf("%f",&b); printf("请输入c的值:"); scanf("%c",&c); printf("a的值为:%d,b的值为:%f,C的值为:%c\n",a,b,c); }
这个是正确的吗?你运行的时候你就会发现,变量c没办法输入了,程序直接结束
哪里有问题?
下面我们来分析
首先程序显示 请输入a的值:
我们输入1,在按回车键
又会显示 请输入b的值:
我们输入1.1 按回车
这时候程序就会显示
请输入c的值:a的值为:1,b的值为:1.100000,C的值为:
这是为什么?别忘了之前说过,空格和回车也是字符
开始输入了1到了变量a里,按回车,继续下一个输入
又输入了1.1到了变量b里
此时再按回车的话,就会被scanf接收了,因为变量c是字符格式,回车也是字符,自动存到变量c里
非字符变量,用scanf连续输入,按空格或回车会等待下一个输入
但是字符和字符串变量,scanf会直接接收空格和回车
怎么解决?在%c前面加一个空格,就是这样scanf(" %c",&c);
#include <stdio.h> main() { int a; float b; char c; printf("请输入a的值:"); scanf("%d",&a); printf("请输入b的值:"); scanf("%f",&b); printf("请输入c的值:"); scanf(" %c",&c); printf("a的值为:%d,b的值为:%f,C的值为:%c\n",a,b,c); }
这样程序就能正常运行
所以不管什么变量类型,最好都在前面加个空格,会是一个好习惯
下面多说一点scanf()的用法,我想大家对这个sacnf()的格式还是有点犯糊涂
printf()是格式化输出函数,我想这个你们应该很容易掌握
scanf()是格式化输入函数,顾名思义,就是你在输入时必须按照指定的格式输入才行
例如
#include <stdio.h> main() { int a,b; printf("请输入两个数\n"); scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b); }
这个是连续输入
输入1 回车 输入2 回车
或者
输入1 空格 输入2 回车
注意:最后的回车是必要的,意味着完成输入
结果为
a=1,b=2
现在在改变一下
把scanf("%d%d",&a,&b);改成scanf("%d,%d",&a,&b);中间加一个逗号
那么,再怎么输入?
注意:出现怎么打什么
先输入1,再输入,(逗号),再输入2 回车
就是这样:1,2 回车
结果也是a=1,b=2,如果输入1就回车,那么b的值就没办法获取,而是你想不到的结果(这个自己去运行)
无论出现什么你就照打什么
如scanf("%d;%d",&a,&b);你就打1;2 回车
哪怕是一个字母一个符号,如scanf("%da%d",&a,&b);你得打1a2 回车
如scanf("-%dabc%d",&a,&b);你得打-1abc2 回车
如果符号字母在最后,如scanf("%d%dabc-*^",&a,&b);
你就完全可以无视,直接打 1 回车 2 回车 就可以了
出现在数值之前和之中的东西就要照着打,之后可无视
还有一种情况
像这样scanf("\n%d%d",&a,&b);和scanf("%d%d\n",&a,&b);
这里不要被迷惑了,这里的\n并不是回车,但是它是转义符
转义符有好几个,并不是带斜号的就是
如果是例如这样scanf("\%d%d",&a,&b);和scanf("%d%d\",&a,&b);还有scanf("%d\%d",&a,&b);
无论哪个都会有错(不是结果就是程序报错),所以不要带\号
补充:/号不存在问题
如果是转义符scanf("\n%d%d",&a,&b);和scanf("%d%d\n",&a,&b);还有 scanf("%d\n%d",&a,&b);
\n在前面和中间你可以无视,但是如果是在后面scanf("%d%d\n",&a,&b);
就必须这样打了,输入1 回车 输入2 回车 输入任何一个或多个字母,数字或字符 回车
结果就是正确的 a=1,b=2
原因:此时输入数据用转义符结尾,scanf会跳过空白符去读下一个字符,所以你必须再输入一个东西(随便一个或多个字母,数字,字符)。这里的空白符包括:空格,制表符,换行符,回车符和换页符。
就是说scanf()里面多了个\n,scanf会跳过你输入后按的回车键或空格键,再读取一个东西,直到没地方存储才会结束scanf
注意空格也包括 scanf("%d%d ",&a,&b); 和\n一样的道理,要多加小心
所以说\n根本没必要在scanf里
下面继续一个scanf()程序
#include <stdio.h>
void main()
{
char a,b;
printf("请输入两个字符\n");
scanf("%c%c",&a,&b);
printf("a=%c,b=%c\n",a,b);
}
这里只改了一下变量类型,但之前不一样了,还记得我跟大家说了空格和回车也是字符吗,在这个程序里就不要按空格回车了,当然最后一个回车要按,不然结果不会出来
这个程序我们只要输入 xy 回车
结果就是a=x,b=y
我们在改scanf("%c%c",&a,&b);变scanf("%c,%c",&a,&b);加逗号
这个和非字符变量一样,也是输入 x,y 回车
结果是a=x,b=y
在改成空格,scanf("%c %c",&a,&b);字符变量这回是可以打空格也可以不打
输入x y(中间空多少格都没关系) 回车 或者xy 回车
结果a=x,b=y
值得注意是scanf("%c%c",&a,&b);这种情况可千万不要打空格,不然空格的值会传到变量b里
补充:scanf("a=%d,b=%d,c=%d",&a,&b,&c);
输入应为:
a=1,b=2,c=3 回车
跟我上面说的照打原理一样
再看一个程序
#include <stdio.h> void main() { char a,b; printf("请输入字符a\n"); scanf("%c",&a); printf("请输入字符b\n"); scanf(" %c",&b); printf("a=%c,b=%c\n",a,b); }
注意空格!虽然字符型需要这样,但最好每次scanf()的时候都搞空格 就是这样scanf(" %d",&a);
关于输出流,缓存,缓冲区之类我们后面有待了解
printf()和scanf()我们暂时先学到这里,今后还有其他的输入输出函数
最新内容
热点内容
- QQ群
- 返回首页
- 返回顶部