printf函数与scanf函数的介绍和if语句的了解(C语言第三天)

文章详细介绍了C语言中的两个重要函数printf和scanf。printf用于格式化输出,包括字符串、整数、浮点数等,可以设置占位符和输出格式。scanf用于从键盘接收输入,赋值给变量,需要注意变量前需加&符号。文章还提及了if语句和循环结构在C语言中的基础用法。
摘要由CSDN通过智能技术生成

scanf && printf introduction

printf函数

是将参数文本传输到屏幕,也可以说是按照指定的打印数据,printf的f代表的是format(格式化)

#include<stdio.h>
int main()
{
    printf("hello world"); 
    //printf()函数是不会自动换行的,若需要换行则需要添加 \n
    printf("hello world\n");
    return 0;
}

占位符

printf()可以输出的文本指定占位符,占位符这个位置可以给其他值代入

占位符除了%d,同时还可以使用%s代入字符串

printf("%s says it is %d o'locock\n","Lisi",22);

输出格式

printf()可以制定占位符的输出格式

限定宽度

printf()允许占位符的最小宽度

例如以下代码

#include<stdio.h>
int main()
{
	printf("%6d\n",123);
    // 输出为 "   123"
	return 0;
}

若要想显示小数,则需要使用 %f 占位符,

注:%f 默认输出后面6位小数

printf("%12f\n",123.4);
//输出为 123.400000

显示正负号

一般情况下printf函数是不会显示**+号**的,只会显示 -号,如果想使用printf()输出 +号,可以在占位符前面加一个+好

printf("%+d\n",11); //output +11
printf("%+d\n",-10);//output -11

显示小数位数

有时候输出,想限定小数的位数,只保留小数后面两位或者n位数数

如果输出小数后面2位,我们可以使用占位符写成%.2f

printf("%.2\n",0.1); //output 0.1
printf("%.5\n",0.1); //output 0.10000

输出字符串

用来输出字符串的占位符是**%s**,一般默认输出全部,如果只想输出某个部分,可以用 %.[n]s指定输出长度

例如

printf("%.5s\n","good morning");
%.5s占位符输出前面的5个字符
//output "good " 

scanf函数

一般在定义变量了之后,我们需要给变量输入值的时候,就要使用到scanf函数,如果要把变量的值输出到屏幕上就要结合printf函数

在这里插入图片描述

错误	C4996	'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

这个报错意思为 vs认为scan函数不安全,考虑使用scnaf_s替换,想要这个错误描述失败则,需要添加CRT_SECURE_NO_WARNINGS 1

  1. 如果只要使用scanf 函数,则需要手动添加**#define _CRT_SECURE_NO_WARNINGS 1**
  2. 与此同时,还可以通过修改vs的newc++file.cpp文件,在里面添加**#define _CRT_SECURE_NO_WARNINGS 1**,每次打开的文件都会自动添加一行#define _CRT_SECURE_NO_WARNINGS 1,就不需要自己手动添加了
  3. 禁用C4996 #pragma warning(disable:4996)

scanf用法

scanf()函数会读取键盘中输入的参数

程序运行到这个语句时候,会停止,等待用户从键盘中输入数据

用户输入数据后,回车,scanf()函数就会处理用户输入的数据,存入到变量中

int a=0;
scanf("%d",&a);
//scanf()传递的不是值,而是地址,所以变量前面需要加上&运算符(指针除外)

从键盘中输入多个变量时候

scanf("%d %d %d %d",&a,&b,&c,&d);
//依次从键盘输入四个变量时候,scanf()处理占位符时候,会自动过滤空白字符,包括空格、制表符、换行符等

scanf返回值

scanf()的返回值是一个整数,表示成功读取的变量个数

如果没有读取任何项,或者匹配失败,则放回0,如果在读取成功或者发生了错误或者遇到读取文件结尾,则返回常量EOF

 int a = 0;
 int b = 0;
 float f = 0.0f;
 int r = scanf("%d %d %f", &a, &b, &f);
 printf("a=%d b=%d f=%f\n", a, b, f);
 printf("r = %d\n", r);

在输入时候按3次ctrl+z,r的输出是-1,也就是EOF

占位符

scanf()的占位符和printf()的占位符是基本一致的

除了%c以外,都会自动忽略起首的空白字符串,%c不会忽略空白符,总是会放回当前的第一个字符,无论该字符是否为空格

如果要强制跳过字符前的空白字符,可以在%c前面加上一个空格,表示跳过零个或者多个空白字符

scanf(" %c");

scanf() 将字符串读⼊字符数组时,不会检测字符串是否超过了数组⻓度,有时候在存储字符串时候,会可能超过数组的边界,就会造成溢出,程序崩毁,所以为了防止使用 %s占位符造成这种情况,我们应该指定读取字符串的最长长度,写成 %[n]s,n表示一个整数,读取字符串的最大长度

char number[10];
scanf("%10s",name);

赋值忽略符

有时候,输入的参数可能不符合预定的格式,就会赋值忽略

例如以下代码

int year=0;
int month=0;
int day=0;
scanf("%d-%d-%d",&year,&month,&day);

在这里插入图片描述

输入2023-7-22,则输出2023-7-22

如果输入2023 7 22 或者 2023/7/22 scanf()解析就会失败

在这里插入图片描述

如何避免出现这种情况呢,我们可以使用*****,这是一个赋值忽略符,只要把*加载任何占位符的百分号后面,占位符就不会返回值,解析后就会丢弃

在这里插入图片描述

%c 在占位符的百分号后面,加入了忽略符,所以占位符没有对应的变量,解读后不必返回

分支与循环

C语言支持3中结构

  1. 顺序结构
  2. 选择结构
  3. 循环结构

if语句

if(表达式)
	语句

当表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行

在C语言中,0为假,非0为真,如果表达式的结果是0,则语句不执行,表达式结果不是0,则语句执行

例如下面的代码,判断是否为奇数

int num=0;
scanf("%d",&num);
if(num % 2 ==1)
    printf("%d 是奇数\n",num);
return 0;

else

else的意思为,如果表达式不成立,则输出下面的表达式

if(表达式)
	语句
else
	语句

例如:判断该数是否为奇数,如果是打印奇数,否则打印偶数

int num=0;
scanf("%d",&num);
if(num % 2 ==1)
    printf("%d 是奇数\n",num);
else
	printf("%d 是偶数\n",num);
return 0;

输入一个年龄,如果大于等于18,则输出成年,否则输出未成年

int age;
scanf("%d\",&age);
if(age >=18)
      printf("成年\n");
else
      printf("未成年\n");
return 0;

嵌套if

if else 语句中,else可以与另一个if语句连用,构成多重判断

if(num == 0)
    printf("输入的数字是0\n");
else if (num>0)
    printf("输入的数字是正数字\n");
else
    printf("输入的数字的负数\n");

上述代码中 else if 构成了嵌套的if语句

关系操作符

用于比较的表达式称为 关系表达式里面使用的运算符称为关系运算符

>大于运算符a >b
<小于运算符a>b
>=大于等于运算符a>=b
<=小于等于运算符a<=b
==相等运算符a == b
!=不想等预算符a != b

在关系表达式中通常放回0或1,表示真假

0表示为假,非0表示为真

常用于if语句或者while循环语句结构中

相等运算符和赋值一年算符是不一样的运算符,有时候会不小心把两者写错,程序能运行但是会出现很多出乎意料的结果

与此同时需要避免多个运算符不宜的连用

例如

int age=0;
scanf("%d",&age);
if(18<=age<=50)
{
	printf("青年\n")
}

随机输入一个数值,他都会输出为青年
在这里插入图片描述

因为18和age中存放的参数44比较,18<=44为假,所以结果为0,然后0和50比较,结果为真,所以就会输出青年

为了避免出现这种情况,我们需要把代码修改为如下

int age=0;
scanf("%d",&age);
if(age>=18 && age<=50)
{
	printf("青年\n")
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值