从零开始学编程---第一步-C语言(二)

时间:2014-03-02 22:19    点击:

在开始的时候大家就已看到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()我们暂时先学到这里,今后还有其他的输入输出函数

来源:幻想编程//所属分类:站长原创/更新时间:2014-03-02 22:19
顶一下
(95)
85.6%
踩一下
(16)
14.4%
上一篇:从零开始学编程---第一步-C语言(一)
下一篇:从零开始学编程---第一步-C语言(三)
相关内容