分享

第四讲 scanf()

 昵称29398856 2016-01-21

       目前我们知道怎么打印输出,但是这些所谓的打印都是我们预先准备好的,那么我们能不能在程序运行时再输入我们想要输入的数据?这一讲我们就来介绍c的标准输入函数,老规矩,我们还是以一个例子引入正题吧,看下面的程序。

---------------------------------

     #include
     int main()
     {
             int a,b;
             printf('请输入2个数:\n');
             scanf('%d %d',&a,&b);
             printf('a*b = %d\n',a*b);
             getchar();
             getchar();
             return 0;
        }

----------------------------------------

这个程序里,我们定义了两个int变量(a,b)来储存我们输入的两个值,第一个输入的值存在&a这块内存中(&a表示a的地址,等讲到指针的时候大家就明白了),输入的第二个数字存放在&b中,我们要打印的输出是a*b的值,如果不出意外,应该一切都和我们想象的一样,现在我们来看下具体的输出什么是什么。

一切都在意料之中,现在大家是不是明白了一件事:那就是如果我们想要输入,使用scanf()就好了。现在我们就来看看scanf()的具体用法,这个函数的原型看起来像是这样:

int scanf( Control - string,*item1,*item2…); 

是不是很眼熟?所以上一次说了,要是能够把printf()玩好了再来玩这个scanf()就是手到擒来,不过很可惜,很多号称程序员的人却无法将一个printf()吃透,都只懂得一些基本的操作,好了好了,闲话不扯了,回归正题,这个Control-string就不多说了,直接把printf()部分的搬过来就好,现在我们来说说后面的*item…。

 

        这里*item是一个指针,由于现在还没给大家说指针,有些朋友可能不知道,在这里,就简单给大家说一下,当我们声明了一个数组,例如:char name[20];name就表示这个数组的首地址,如果我们声明的是一个变量,如:

char n;我们取n的地址即可表示一个指针了,对一个变量取地址直接在他前面加&即可,所以,n的地址就是&n

 

      弄清楚printf()之后再来看scanf()是不是很简单,我虽然说得不好,但是相信以大家的智慧应该不难理解,所以想说大家都已经知道这个scanf()到底怎么用了吧。下面我们再来看看这个程序,我们想要在控制台中输入“Hello World”然后通过printf()再打印出来。

---------------------------------------

  #include
  int main()
  {
        char name[20];
        printf('请输入一个字符串:\n');
        scanf('%s',name);
        printf('你所输入的字符串是:%s\n',name);
        while(1)
               ;
        return 0;
}

----------------------------------------

这里我们先声明了一个字符数组name,这个数组能够容纳20个字符,“Hello World”只占了12个字符,所以声明20个字符的数组储存这个Hello World应该是没问题的。

----------------------------------------

            while(1)

                  ;

----------------------------------------

这个位置是不是很奇怪,这里我们没有使用gechar()来让屏幕停住,而是使用这个死循环来让屏幕停住(关于循环以后会细说),说到这里,不得不承认C/C++的强大,可以说是无所不能,不废话了,我们先来看看输出,是不是和想象中的一样:

       奇怪,为什么只输出一个Hello呢?大家自己多尝试几下,是不是发现都还是一样的问题?

现象就是这样,scanf()当读到空字符时就会停止,所以想要他输出Hello World只有不打空间那个空格。

       实在可惜,这不是C语言的标准输入函数吗?那我们到底该怎么样才能完整的输入一句话呢?嗯,这就是我们明天要说的专门用于字符串输入的gets()和getchar()了。

 

       总结一下吧,如果要输入数字,字符,一个单词用scanf(),但使用scanf()的时有一点值得注意,如果你想要输入一个数字然后打个标点符号来隔开那么在Control-string里面的转换符间记得用相应的标点符号隔开,如果只是用空格,那么就用空格隔开转换符即可,如下的类型:

        scanf('%d,%d',&a,&b);再输入a,b的时候就记得用“,”隔开两个数字,看看下面的两个实例:

 

 

下面来个错误的实例:

       看出问题了吗?为什么会得出这么荒谬的结果?主要原因还是因为b没有被初始化,我们输入的4并没有传递到&b里,所以没有被初始化的b就会随便乱抓取一个值来和a相乘。

    

      好了,scanf()就到这里吧,大家可以和前面的printf()搭配起来看。

=================

 回复D直接查看当前目录

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多