C语言scanf()函数「建议收藏」

C语言scanf()函数「建议收藏」scanf()函数基础扩充

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

scanf()函数基础扩充:

 

  C函数库包含了多个输入函数,其中最常用的差不多就是scanf()了,它可以读取各种格式的输入。

  scanf()可以把输入的字符串转换成我们想要的各种形式,整数、浮点数、字符串等等,它是printf()的逆过程。和printf()一样都有控制字符串和参数列表,不同的是scanf()的参数列表是指向变量的指针

#include <stdio.h>


int main()
{
    int age;
    float height;
    char address[30];
    
    printf("enter your age\n");
    scanf("%d",&age);
    printf("enter your height\n");
    scanf("%f",&height);
    printf("enter your address\n");
    scanf("%s",address);
    
    printf("age : %d height: %f  address: %s\n",age,height,address);
}

  上述程序用scanf()完成了一个简单的提示输入交互功能。

  

    int age;
    float height;
    char address[30];
    
    scanf("%d",&age);
    scanf("%f",&height);
    scanf("%s",address);

   可以看到第三个scanf的参数和第一二个的参数长得不太一样,第一二个用了取地址符&,第三个没有。然而它们都是指向相应变量的指针,对于指向int、float型的指针,用变量名取地址,也就是上面的&age 和 &height;对于数组,数组名便是指向它的指针,如上面的 address。

   scanf()要求传递的是变量的指针,因为我们的输入要存储到这些变量中,也就是要在函数中改变这些变量的值,传递指针才能修改参数变量的值,这里感觉有点像用一个函数交换两个数的值参数要传指针那样的情况。如果传递的不是指向对应变量的指针,那么程序很可能崩溃。

 

  从scanf()的角度看输入:

   假定我们使用了一个%d说明符来读取一个整数。

   scanf()开始每次读取一个输入字符,且跳过空白字符(空格、tab、换行符)直到遇到第一个非空白字符,它试图读取一个整数,所以如果遇到输入字符为一个数字或者一个符号(+和-)则把该字符保存并继续下一个字符的读取,直到它遇到一个非数字的字符,就可以得出结论已经读到了整数的尾部,这时scanf()把这个非数字的字符放回输入。这意味着当程序进行下一次开始读取输入时,它将从前面被放回输入的那个非数字字符开始

   最后scanf()计算读取到的输入的相应数值,并将该值存放到相应变量中。

  

 scanf()的返回值:

    scanf()函数返回成功读入的项目的个数,如果没有读取任何项目(当期望读取到数字,而输入的是飞数字字符)则返回0。当检测到文件末尾时,会返回EOF(end of file),EOF是在文件

stdio.h中定义的特殊值,一般 #define为-1。

    scanf()的返回值可以有如下程序等应用:

  

    //输入为数字则进行处理,否则退出循环
    while(1==scanf("%d",&num))          
    { 
        //do something...
    }   
    
    //跳过输入的整数
    while(1==scanf("%d",&num))          
           ;

 

 

 

参考:C primer plus

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168112.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SpringBoot系列之从入门到精通系列教程

    SpringBoot系列之从入门到精通系列教程

    2020年11月19日
    175
  • 2022价值3888开源企业发卡网源码/全网对接/全新UI风格/完美运营

    2022价值3888开源企业发卡网源码/全网对接/全新UI风格/完美运营系统是全开源的,功能很多就不一一介绍了,喜欢就拿走,互站上卖3888免费开源,100%能搭建!发卡系统功能亮点介绍:1:已接入易支付接口/支持qq/微信/支付宝2:全网商品对接,店铺对接一秒完成对接,!3:商品池系统/供货系统/代理系统/对接码对接商品4:店铺音乐支付接口/缩我短网址接口/销售模版主题设置5:后台新增一键添加支付接口/商品池权限/推荐商品权限/商家保证金6:平均有15套pc售卡模版,3套手机售卡模版7:一些系统还带有后门,我这个系统完全无后门8:本系统不敢说全网最牛,但是我个人觉得很不错注

    2022年7月14日
    16
  • SSIS 关于并发的两个设置

    SSIS 关于并发的两个设置

    2021年9月12日
    64
  • Spring笔记(4)

    Spring笔记(4)

    2021年11月11日
    45
  • noip2018提高组初赛解析_NOIP提高组

    noip2018提高组初赛解析_NOIP提高组题目背景NOIP2012提高组DAY2试题。题目描述H国有n个城市,这n个城市用n-1条双向道路相互连通构成一棵树,1号城市是首都,也是树中的根节点。H国的首|都爆发了一种危害性极高的传染病。当局为了控制疫情,不让疫情扩散到边境城市(叶子节点所表示的城市),决定动用军队在一些城市建立检查点,使得从首都到边境城市的每一条路径上都至少有一个检查点,边境城市也可以…

    2022年8月22日
    3
  • Python环境配置及项目建立

    Python环境配置及项目建立一、安装PythonPython比较稳定的两个版本是Python3.5和Python2.7,我用的是Python2.7,下载地址是:https://www.python.org/downloa

    2022年7月5日
    19

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号