学c语言编程第一步,从零开始学编程---第一步-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

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

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

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

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

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

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

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

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()我们暂时先学到这里,今后还有其他的输入输出函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值