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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • url参数过长_url长度限制为多少

    url参数过长_url长度限制为多少HTTP协议不对URI的长度作事先的限制,服务器必须能够处理任何他们提供资源的URI,并且应该能够处理无限长度的URIs,这种无效长度的URL可能会在客户端以基于GET方式的请求时产生。如果服务器不能处理太长的URI的时候,服务器应该返回414状态码(此状态码代表Request-URI太长)。具体参见协议ietf.org/rfc/rfc2616.txt虽然协议中未明确对url进行长度限制…

    2022年8月24日
    34
  • bypasswaf之盲注

    0x00前言前面讲到了联合查询如何过waf,那么今天给大家来讲讲盲注怎么去,bypasswaf。这里还是以xx狗为例。0x01与waf的对抗我们来试试常规的注入思路。'单引号不

    2021年12月11日
    58
  • 数据预处理之Bartlett’s球状检验

    数据预处理之Bartlett’s球状检验用于检验相关阵是否为单位阵,即检验各个变量是否各自独立。在因子分析中,若拒绝原假设,则说明可以做因子分析,若不拒绝原假设,则说明这些变量可能独立提供一些信息,不适合做因子分析。因子分析前,首先进行KMO检验和巴特利球体检验,KMO检验系数&gt;0.5,(巴特利特球体检验的x2统计值的显著性概率)P值&lt;0.05时,问卷才有结构效度,才能进行因子分析,因子分析主要是你自己做了一份调查问…

    2022年6月18日
    46
  • Webstorm关闭ESLint警告

    Webstorm关闭ESLint警告

    2022年4月30日
    60
  • 本地如何使用phpstudy环境搭建多站点

    本地如何使用phpstudy环境搭建多站点

    2021年10月7日
    48
  • wpf和winform(excel中控件)

    步骤1:创建WinForm工程步骤2:在刚刚创建的WinForm工程中新建或者添加现有的WPF用户自定义控件

    2022年4月15日
    45

发表回复

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

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