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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 测试这个东西好不啦

    测试这个东西好不啦欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗Ctrl+B斜体Ctrl+I引用Ctrl

    2022年10月31日
  • 基于 msf 的免杀项目的一些工具「建议收藏」

    基于 msf 的免杀项目的一些工具「建议收藏」https://mp.weixin.qq.com/s/W7mBroOtVUdMHA7f07J_7Q转载自信安之路这两个月来持续的糜烂,乱七八糟的事,在今天lol完觉得不能再浪费时间来Orz,向大神们开始学习来0x02avet工具使用此工具当年在2017年黑帽大会上惊艳全场,使用kali下载:gitclonehttps://github.c…

  • js如何生成二维码_jquery 生成二维码无法识别

    js如何生成二维码_jquery 生成二维码无法识别前言最近根据自己的需求寻找到了一款简单易用的生成二维码插件,特此分享一、使用步骤1.下载插件npmiqrcodejs2或yarnaddqrcodejs2二、vue中使用1.vue2<template><div><divref=”qrcodeDom”></div><button@click=”show”>展示二维码</button><bu.

    2022年10月17日
  • Android蓝牙开发—经典蓝牙详细开发流程[通俗易懂]

    Android蓝牙开发—经典蓝牙详细开发流程[通俗易懂]    Android蓝牙开发前,首先要区分是经典蓝牙开发还是BLE(低功耗)蓝牙开发,它们的开发是有区别的,如果还分不清经典蓝牙和BLE(低功耗)蓝牙的小伙伴,可以先看Android蓝牙开发—经典蓝牙和BLE(低功耗)蓝牙的区别本文是针对经典蓝牙开发的,如果是BLE(低功耗)蓝牙开发,可以看Android蓝牙开发—BLE(低功耗)蓝牙详细开发流程开发流程开启蓝牙 扫描蓝牙 …

  • QT之在QML中使用C++类和对象

    QML其实是对ECMAScript的扩展,融合了Qtobject系统,它是一种新的解释性语言,QML引擎虽然由QtC++实现,但QML对象的运行环境说到底和C++对象的上下文环境是不通的,是平行的

    2021年12月29日
  • 第二十七周微职位

    第二十七周微职位

发表回复

您的电子邮箱地址不会被公开。

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