C/C++|物联网开发入门+项目实战|C语言基础|玩转c代码---从输入输出开始-学习笔记(6)

文章目录

  • 玩转c代码---从输入输出开始
    • 参考教程:C语言编程:一本全面的C语言入门教程(第3版)第16章
    • 需要掌握的内容
    • 需要了解的内容
      • 常见的人机交互接口
      • 串口的输入输出
    • PC常用的几个输入输出函数
      • 示例代码
    • 3 printf函数使用难点分析
      • A.格式控制字符串的基本形式:
        • 示例代码
      • B.—些特殊字符的输入
    • 常用键盘输入函数及重难点
      • 1 字符输入函数getchar函数原型:
      • 2 格式化输入函数scanf
      • 3 scanf难点分析
        • 传入的参数(回车,空格或者tab当作分隔)
        • scanf格式字符格式字符
          • 示例
      • 遇到非空白字符的处理
      • 通过文件的人机交互函数
  • Tips: initialization makes integer from pointer without a cast

玩转c代码—从输入输出开始

参考:麦子学院-C语言程序设计及快速入门

参考教程:C语言编程:一本全面的C语言入门教程(第3版)第16章

需要掌握的内容

printf函数的使用putchar函数的使用scanf函数的使用getchar函数的使用
库函数的概念及使用方法

需要了解的内容

·人机交互的概念:计算机和人进行通信的方式

常见的人机交互接口

屏幕输出和视频输入
键盘输入
音频的输入输出
嵌入式系统的人机交互

串口的输入输出

.LED灯及LED阵列的输出
蜂呜器的输出
触摸屏
更加复杂的输入输出通路(无线网络,手机)

PC常用的几个输入输出函数

常用屏幕输出函数及重难点
什么是库函数,如何使用库函数
可参考:C函数速查
1 字符输出函数putchar
2 格式化的输出函数printf
函数原型:
extern void printf(const char *format,…),
调用格式:
printf(“格式控制字符串”,输出表列)

示例代码

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int int_num = 30;
    float flo_num = 25.5f;
    int num1 = 0;
    int num2 = 0;

    printf("Hello world! int num dec=%d     %o      %x\n",int_num, int_num, int_num);
}

输出:Hello world! int num dec=30 36 1e

3 printf函数使用难点分析

A.格式控制字符串的基本形式:

[标志][输出最小宽度][.精度][长度]类型
常见类型字符

4 printf常见格式字符格式字符
d 以十进制形式输出带符号整数(正数不输出符号),如果浮点数用%d,类型错误,只能输出0
o 以八进制形式输出无符号整数(不输出前缀0) 。
x,X 以十六进制形式输出无符号整数(不输出前缀0x)
u 以十进制形式输出无符号整数。
f 以小数形式输出单、双精度实数-
e,E 以指数形式输出单、双精度实数。
g,G 以%f或%e中较短的输出宽度输出单、双精度实数
c 输出单个字符,
s 输出字符串。
printf常见标志

  • 结果左对齐,右边填空格。
  • 输出符号(正号或负号)
    空格 输出值为正时冠以空格,为负时冠以负号
    #对c、s、 d、u类无影响;
    对○类,在输出时加前缀o;
    对x类,在输出时加前缀Ox;
    对e、g、f类当结果有小数时才给出小数点。

示例代码

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int int_num = 30;
    float flo_num = 25.5f;
    int num1 = 0;
    int num2 = 0;

    //printf("Hello world! int num dec=%d     %o      %x\n",int_num, int_num, int_num);

    printf("****************************************************************\n");
    printf("%26d|%-8d|%8.6d|%8.8f\n",int_num, int_num, int_num, flo_num);
    printf("%#8o|%#8X|%8d|%-8d|%8.6d|%8.8f\n", int_num, int_num, int_num, int_num, int_num, flo_num);
}

输出:


                    30|30      |  000030|25.50000000
 036|    0X1E|      30|30      |  000030|25.50000000

在这里插入图片描述

B.—些特殊字符的输入

转义字符含义
\反斜线
单引号
"双引号
\r回车符
\t制表符(tab)
\b退格符
\f换页符
\0空字符
\xhh以十六进制数表示的字符
\ooo以八进制数表示的字符

常用键盘输入函数及重难点

1 字符输入函数getchar函数原型:

int getchar(void);

2 格式化输入函数scanf

函数原型: int scanf(char *format[,argument…]);
调用格式:scanf(“<格式化字符串>”,<地址表>);

3 scanf难点分析

传入的参数(回车,空格或者tab当作分隔)

格式化字符串

scanf格式字符格式字符

    说明
    %a 读入一个浮点值(仅c99有效)
    %A 同上
    %c 读入一个字符
    %d 读入十进制整数
    %i 读入十进制,八进制,十六进制整数
    %o 读入八进制整数
    %x 读入十六进制整数
    %X 同上
    %c 读入一个字符
    %s 读入一个字符串
    %f 读入一个浮点数
    %F 同上
    %e 同上
    %E 同上
    %g 同上
    %G 同上
    %p 读入一个指针
    %u 读入一个无符号十进制整数
    %n 至此已读入值的等价字符数
    %[] 扫描字符集合
    %% 读%符号
示例
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int int_num = 30;
    float flo_num = 25.5f;
    int num1 = 0;
    int num2 = 0;
    char get_char = "";

    //printf("Hello world! int num dec=%d     %o      %x\n",int_num, int_num, int_num);

    // printf("****************************************************************\n");
    // printf("%26d|%-8d|%8.6d|%8.8f\n",int_num, int_num, int_num, flo_num);
    // printf("%#8o|%#8X|%8d|%-8d|%8.6d|%8.8f\n", int_num, int_num, int_num, int_num, int_num, flo_num);

    // get_char = getchar();
    // printf("%c \n",get_char);

    scanf("%d  %d", &num1, &num2);

    printf("%d  %d\n", num1, num2);

    return 0;
}

输出:

E:\temp>cd "e:\temp\" && gcc 1.c -o 1 && "e:\temp\"1
1.c: In function 'main':
1.c:10:21: warning: initialization makes integer from pointer without a cast [enabled by default]
123 32
123  32

遇到非空白字符的处理

读取的时候如果有非空白字符,则输入的时候也需要加上。或者,中间不加入分隔符。

通过文件的人机交互函数

文件操作函数列表
fopen,fclose,getc,putc,feof,fgets,fputs,fprintf,fscanf

Tips: initialization makes integer from pointer without a cast

参考原文链接:https://blog.csdn.net/qq_52749711/article/details/128735193
编译器警告: warning: initialization makes integer from pointer without a cast [enabled by default]
表示在初始化一个指针时将一个整型值直接赋值给指针,而不是使用强制类型转换。
在C语言中,指针和整型是不同类型,不能直接相互赋值。
可以尝试以下方法来解决:
使用强制类型转换,将整型转换为指针类型。
将整型赋值给一个临时变量,再将临时变量赋值给指针。
检查代码中是否有错误,如果是误操作导致的,修改对应的问题
请注意,尽管编译器可能不会报错,但是这样的代码是不安全的。
最好的方法是将整型转换为指针类型,或者检查代码是否有错误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/9892.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

今天给大家介绍一篇基于springboot的医院管理系统的设计与实现

临近学期结束&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问题&#xff0c;今天给大家介绍一篇基…

APK一键注入网络验证后台PHP源码ThinkPHP开发版

APK一键注入网络验证后台PHP源码ThinkPHP开发版 APK一键注入网络验证后台PHP源码ThinkPHP开发版 源码: https://url11.ctfile.com/d/25976711-55383299-827d49?p6724 &#xff08;访问密码&#xff1a;6724&#xff09; 修复 已去除登录提示到期问题。 功能简介 - 无注…

软考-套接字(scoket)

&#x1f4a4;SocketSocket套接字&#xff1a;是由系统提供用于网络通信的技术&#xff0c;是基于TCP/IP协议的网络通信的基本操作单元。将OSI模型中从传输层到物理层封装起来的抽象层&#xff0c;把网络协议隐藏在Socket抽象层中&#xff0c;只对使用者暴露API接口&#xff0c…

Redis实现分布式锁原理和Redisson框架实现分布式锁,全网最详细讲解

声明&#xff1a;我的大部分篇幅都讲的分布式锁的原理和实现&#xff0c;如果想直接用Redisson框架实现分布式锁&#xff0c;可以直接翻至最后面 关于分布式锁&#xff0c;适用于并发量特别大的微服务集群&#xff0c;能做到同步的实现资源的获取 我其实没有经过真实项目的分布…

【ROS2指南-1】配置ROS2环境

资料来源Configuring your ROS 2 environment — ROS 2 Documentation: Dashing documentationhttp://docs.ros.org/en/dashing/Tutorials/Configuring-ROS2-Environment.html 目标&#xff1a;本教程将向您展示如何准备 ROS 2 环境。 教程级别&#xff1a;初学者 时间&…

MyBatis(十一)、MyBatis查询语句专题

准备工作&#xff1a; 模块名&#xff1a;mybatis-007-select 打包方式&#xff1a;jar 引入依赖&#xff1a;mysql驱动依赖、mybatis依赖、logback依赖、junit依赖。 引入配置文件&#xff1a;jdbc.properties、mybatis-config.xml、logback.xml 创建pojo类&#xff1a;Car 创…

【华为机试真题详解JAVA实现】—从单向链表中删除指定值的节点

目录 一、题目描述 二、解题代码 一、题目描述 输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。 链表的值不能重复。 构造过程,例如输入一行数据为: 6 2 1 2 3 2 5 1 4 5 7 2 2 则第一个参数6表示输入总共6个节点,…

AI又进化了,声音克隆革命性突破

大家好&#xff0c;我是 Jack。 因 ChatGPT、Stable Diffusion 让 AI 在文本、图像生成领域火出了圈。 但 AI 在生成方面的能力&#xff0c;可不仅如此&#xff0c;音频领域也出现了很多优秀的项目。 我用我本人的音频数据&#xff0c;训练了一个 AI 模型&#xff0c;生成了…

数据结构系列17——lambda表达式

目录 1. 基本概念 2. 基本语法 3. 函数式接口 4. Lambda表达式的基本使用 4.1 语法精简 5. 变量捕获 6. Lambda在集合当中的使用 1. 基本概念 Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一…

循环依赖详解及解决方案

介绍 上图就是循环依赖的三种情况,虽然方式不同,但是循环依赖的本质是一样的,就A的完整创建要依赖与B,B的完整创建要依赖于A,相互依赖导致没办法完整创建造成失败. 循环依赖代码演示 public class Demo {public static void main(String[] args) {new Demo1();} }class Demo1…

打造出ChatGPT的,是怎样一群人?

震惊世界的ChatGPT&#xff0c;要多少人才能开发出来&#xff1f;几百&#xff0c;还是几千&#xff1f; 答案是&#xff1a;87个人。 老实说&#xff0c;刚看到这个数字真是惊到我了&#xff0c;印象里&#xff0c;之前看媒体报道各大巨头人工智能人才储备时&#xff0c;动辄…

长草

4 5 .g… … …g… … 2 gggg. gggg. ggggg .ggg. #include <iostream> using namespace std;int r,l;char arr[1005][1005];int t;char dp[1005][1005]; int dx[4]{0,0,1,-1},dy[4]{1,-1,0,0}; void dfs(int x,int y) {for(int i0;i<4;i){int axdx[i];int bydy[i];if…

Qt Quick - 分隔器综述

Qt Quick - 分隔器综述一、概述二、MenuSeparator 控件1. 用法&#xff1a;三、ToolSeparator 控件1. 用法一、概述 Qt Quick Controls 提供了多种分隔符&#xff0c;其实就是分割一下MenuBar和ToolBar里面的内容。 控件功能MenuSeparator将菜单中的一组项目与相邻项目分开To…

dolphinscheduler资源中心

资源中心 资源中心介绍 资源中心提供文件管理&#xff0c;UDF管理&#xff0c;任务组管理。 文件管理可以访问要执行的hive的sql文件 UDF管理可以放置fllink执行的自定义udf函数jar包&#xff0c;hive自定义的UDF函数jar包 以上的*.sql,*.jar文件可以理解为资源&#xff0c…

【服务器数据恢复】 重装系统导致xfs文件系统分区丢失的数据恢复案例

服务器数据恢复环境&#xff1a; EMC某型号存储&#xff0c;20块磁盘组建raid5磁盘阵列&#xff0c;划分2个lun。 服务器故障&#xff1a; 管理员执行重装系统操作后发现分区发生改变&#xff0c;原先的sdc3分区丢失&#xff0c;该分区采用xfs文件系统&#xff0c;存储了公司重…

红队内网靶场

文章目录开篇介绍靶场介绍靶场下载以及配置Tomcat Get Shell突破DMZ防火墙拿下域内成员机器将内网机器上线到CS使用Adfind侦察子域信息控制子域DCRadmin登录子域进行权限维持(白银票据/ACL)子域bloodhound获取父域信息分析子域Krbtgt密钥创建跨域金票Dcsync父域PTH父域DC准备打…

什么是 三维渲染内核?

一、引言 随着计算机图形学的发展&#xff0c;三维图形已经成为 电子游戏、动画电影 和 可视化、数字孪生等领域的关键技术。为了将三维模型转换成二维图像&#xff0c;我们需要依赖一个称为三维渲染内核的工具。本文将详细介绍三维渲染内核的原理、实现方法和应用&#xff0c…

每日做题总结——day01

目录 选择题 for循环 指针数组 位段 getchar 大小端存储 进制与格式控制符 位运算 数组指针 二维数组的存储 计算二进制中1的个数 斐波那契数列求递归次数 编程题 删除公共字符 排序子序列 倒置字符串 选择题 for循环 解析&#xff1a;该题主要看for…

面试题React

1.React Fiber是什么&#xff1f; 在 React V16 将调度算法进行了重构&#xff0c; 将之前的 stack reconciler 重构成新版的 fiber reconciler&#xff0c;变成了具有链表和指针的 单链表树遍历算法。通过指针映射&#xff0c;每个单元都记录着遍历当下的上一步与下一步&…

【从零开始学Skynet】工具篇(二):虚拟机文件的复制粘贴

大家在Linux系统下开发的时候肯定会遇到虚拟机与主机间无法复制粘贴的问题&#xff0c;现在我们就来解决这样的问题&#xff0c;方便我们的开发。 1、打开设置 我们可以系统界面的菜单栏点击“控制”&#xff0c;然后打开“设置”&#xff1b; 也可以在VirtualBox界面打开“设…