【筑基系列】 初识C语言

简介: C语言之前的必修课

1.VS 2022 中scanf 报错 的 问 题

在这里插入图片描述

当我们在VS2022使用scanf时,会出现以上错误:

解释为: 可以考虑使用scanf_s来代替,如果想继续使用,在前面加上_CRT_SECURE_NO_WARNINGS

#include<stdio.h>
int main() {
    int a;
    scanf("%d", &a);
    printf("%d", a);
}
AI 代码解读

scanf()函数是标准C中提供的标准输入函数,用以用户输入数据

scanf_s()函数是Microsoft公司VS开发工具提供的一个与scanf功能相同的安全标准输入函数,仅能在VS中使用,如果想要继续使用scanf,只需要在文件顶部加入一行

#define _CRT_SECURE_NO_WARNINGS
AI 代码解读

即可。


2.printf的使用

1 ) 可以在”%”和字母之间插进数字表示最大场宽

  printf("%4d",a);    表示输出4位整型数据;
  printf("%6s",b);    表示输出六个字符的字符串;
  printf("%9.2f",c);  表示输出场宽为9的浮点数, 其中小数点后两位小数;       
AI 代码解读

​ 2 ) 可以在场宽前加数字0,用于填补宽度

printf("%04d",&d);  表示在输出一个小于4位的数值时, 将在前面补0使其总宽度为4位;
  例:
          #define _CRT_SECURE_NO_WARNINGS
          #include<stdio.h>
          int main(){
                   int a;
                   scanf("%d", &a);
                   printf("%04d", a);
            }
AI 代码解读

​ 当输入数字为202时,输出为0202.前边自动补齐四位:

在这里插入图片描述

3 )在%后加“-”表示左对齐

 printf("%-7d",e)     表示输出7位整数左对齐;
AI 代码解读

4 )用浮点数表示字符输出格式

    %6.9s 表示显示一个长度不小于6且不大于9的字符串,若大于9, 则第9个字符以后的内容将被删除;
AI 代码解读

附:

printf可以设置输出的精度和域宽,scanf是不能设置精度的,也就是不能出现任何 .xf 这样的格式 ,但是可以写成scanf("%2f")设置域宽,是正确的格式。

​ %o 以八进制整数形式输出,这个就用得很少了,了解一下就行了。

​ %x(或 %X 或 %#x 或 %#X) 以十六进制形式输出整数,这个很重要*

printf("八进制、无前缀输出结果:%o\n",ii);  // 八进制、无前缀输出结果:144
printf("八进制、有前缀输出结果:%#o\n",ii); // 八进制、有前缀输出结果:0144

printf("十六进制、无前缀输出结果:%x\n",ii);  // 十六进制、无前缀输出结果:64
printf("十六进制、有前缀(小写)输出结果:%#x\n",ii); // 十六进制、有前缀(小写)输出结果:0x64

printf("十六进制、无前缀输出结果:%X\n",ii);  // 十六进制、无前缀输出结果:64
printf("十六进制、有前缀(大写)输出结果:%#X\n",ii); // 十六进制、有前缀(大写)输出结果:0X6
AI 代码解读

3.C语言中 %f 和 %lf 的区别

float, 单精度浮点型,对应%f。
double,双精度浮点型,对应%lf。

scanf中的格式控制

​ scanf:float用%f,double用%lf

img

printf中的格式控制

在printf中,无论是float类型还是double类型,输出都需要用%f,在有些系统中用%lf也不会出错,但是尽量还是按照标准来。

img

所以在输入输出时,一定要区分好double和float,而使用对应的格式符号。


4.C语言中的多组输入与输出

输入指的是在输入一组数据后,程序便结束运行。而多组输入指的是在输入一组数据后,程序不会结束,它还会接收另一组数据.

以a+b为例进行讨论:

4.1<--只有一组测试数据时-->

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
    int a,b;
    scanf("%d %d", &a, &b);
    printf("%d", a + b);
    return 0;
}
AI 代码解读

4.2输入没有数据总数(任意组)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
    int a, b;

    while (scanf("%d%d", &a, &b) != EOF)
    // 把你的scanf函数写成这样子,除了return 0之外,其他的语句都要用大括号括起来. 
    {
        printf("结果为%d\n", a + b);
    }

    return 0;
}
AI 代码解读

此时可以读入多组数据并分别进行输出

在这里插入图片描述

例:求最大公约数和最小公倍数之和

#include<stdio.h>
int main() {
    long int m = 0;
    long int n = 0;
    while (scanf("%d %d", &m, &n) != EOF){
        long int i = n;
        long int j = m;
        long int r = 0;
        while (r = i % j) {
            i = j;
            j = r;
        }
        printf("%ld", m * n / j + j);
        return 0;
    }

}
AI 代码解读

4.3指定数据量

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
    int n, a, b;
    scanf("%d", &n);
    while (n--)//n自减直到n=0时结束
    {
        scanf("%d %d", &a, &b);
        printf("%d\n", a + b);
    }
    return 0;
}
AI 代码解读

这种情况下可以指定数据的量数 如: n = 5

在这里插入图片描述

4.4以特定元素作结束符

输入和第一种类似。常用特殊符号结束或者0与 - 1来当作结束标志

//a=b=0时结束
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
    int a, b, n;

    while (1)
    {
        scanf("%d %d", &a, &b);
        if (a == 0 && b == 0)//a与b同时0时结束
            break;
        printf("%d\n", a + b);
    }

    return 0;
}
AI 代码解读

在上述情况下,满足指定条件则程序结束

在这里插入图片描述


5.C语言中转义字符的使用

示例一:

当我们要在我们要在屏幕上打印一个目录 c:\code\test.c时

#include<stdio.h>
int main() {
    printf(" c:\code\test.c");
    return 0;
}
AI 代码解读

结果却是:

在这里插入图片描述

这是因为\与后面的英文字母构成了转义字符,\t是水平制表符,就是键盘最左边一列上的table键。

同时为防止\被解释为一个转义序列符,我们就需要在\前面再加上一个\,让它称为普普通通的\,所以正确的写法应该是

#include<stdio.h>
int main() {
    printf(" c:\\code\\test.c");
    return 0;
}
AI 代码解读

此时的运行结果为

在这里插入图片描述

就得到我们想要的结果了。

示例二:

判断输出的结果如何

#include<stdio.h>
int main()
{
    printf("%d\n", strlen("abcdef"));
    // \32被解析成一个转义字符
    printf("%d\n", strlen("c:\test\328\test.c"));
    return 0;
}
AI 代码解读

答案分别为: 6 和 14

第一个字符串是由六个字母组成的;

第二个字符串分别是'c' ':' '\t' 'e' 's' 't' '\32' '8' '\t' 'e' 's' 't' '.' 'c'总共14个字符。其中\328不要误认为是一个字符,这是因为八进制数字只有0-7,因此8单独作一个字符;

附转义字符表如下:

在这里插入图片描述

相关文章
探索人工智能:使用Python构建一个简单的聊天机器人
探索人工智能:使用Python构建一个简单的聊天机器人
398 0
有了 Dataphin v4.0,跨系统调度依赖再也不是难题
Dataphin v4.0引入了新的触发式节点,用于解决多数据平台间的调度问题。当上游系统(如Unix的crontab)完成数据采集后,可通过触发式节点通知Dataphin开始拉取数据,避免传统轮询方式的效率低和资源占用。触发式节点需满足Dataphin OpenAPI开通和网络连通条件,并通过SDK进行外部触发。示例展示了如何创建和使用触发式节点,以及使用Java SDK模拟触发请求。
580 0
ByteArray转byte[]的两种方式以及HeapByteBuffer&DirectByteBuffer
将ByteArray转byte[],大部分人第一时间会使用get函数
783 0
《深度剖析:Q-learning与策略梯度方法的本质区别》
在强化学习领域,Q-learning和策略梯度方法是两种重要的算法。Q-learning通过迭代更新状态-动作值(Q值),评估动作价值,适用于离散动作空间;策略梯度方法则直接优化参数化策略,适合连续动作空间。前者收敛稳定但速度较慢,后者收敛快但稳定性差。两者各有优劣,适用于不同场景。
217 27
【保姆级教程]】5分钟用阿里云百炼满血版DeepSeek, 手把手做一个智能体
阿里云推出手把手学AI直播活动,带你体验DeepSeek玩法。通过阿里云百炼控制台,用户可免费开通满血版R1模型,享受100w token免费额度。活动还包括实验步骤、应用开发教程及作业打卡赢好礼环节,提交优秀作品更有机会获得定制礼品。快来参与吧!
2411 10
Spring基础3——AOP,事务管理
AOP简介、入门案例、工作流程、切入点表达式、环绕通知、通知获取参数或返回值或异常、事务管理
Spring基础3——AOP,事务管理
安卓与iOS开发环境的差异及适配策略
在移动应用开发的广阔舞台上,Android和iOS两大操作系统各据一方,各自拥有独特的开发环境和工具集。本文旨在深入探讨这两个平台在开发环境上的关键差异,并提供有效的适配策略,帮助开发者优化跨平台开发流程。通过比较Android的Java/Kotlin和iOS的Swift/Objective-C语言特性、IDE的选择、以及API和系统服务的访问方式,本文揭示了两个操作系统在开发实践中的主要分歧点,并提出了一套实用的适配方法,以期为移动开发者提供指导和启示。
详解RSA加密算法 | Java模拟实现RSA算法
详解RSA加密算法 | Java模拟实现RSA算法
338 1
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问