首页 > 其他分享 >3.C语言中scanf 和printf的重点介绍(续10/25篇)

3.C语言中scanf 和printf的重点介绍(续10/25篇)

时间:2024-10-30 22:46:33浏览次数:7  
标签:10 25 int scanf 占位 输出 printf main

文章目录


一、printf

1.1 基本用法

printf ( )的作用是将参数文本输出到屏幕。f 代表format(格式化),表示可以定制输出文本的格式。

#include<Stdio.h>  //使用该函数printf,必须包含头文件<stdio.h>
int main()
{
  printf("Hello World");
  printf("hello world\n");   //   \n换行符
  return 0 ;
}

屏幕上第一行会出现"Hello World".

1.2 占位符

printf ( ) 可以在输出文本中指定占位符。

#include<stdio.h>
int main()
{
   int a = 0;
   printf("%d\n",a);  // %d 就是占位符
   return 0 ;
}
//输出值为10

%d 表示这里代入的值必须是一个整数

  • printf( )的第二个参数就是替换占位符的值

常用的占位符除了%d,还有%s表示输入的是字符串。

#include<stdio.h>
int main()
{
  printf("%s will come tonight\n","zhangsan";  // 字符串需要用""包括
  return 0;
}
//打印结果显示为 zhangsan will come tonight

%s 表示输入的是字符串

输出的文本里面可以使用多个占位符

#include<stdio.h>
int main ()
{
  printf("%s says it is %d o'clock\n","list",21)
  return 0;
}
//输出结果显示为list says it is 21 o'clock
  • printf( )参数是一一对应关系,如果有n个占位符,printf()的参数就应该有n +1 个。如果参数个数少于对应的占位符,printf()可能会输出内存中的任意值。

1.3 占位符列举

printf ( ) 的占位符有许多种类,与C语⾔的数据类型相对应。下面按照字母顺序,列出常用的占位符,⽅便查找,具体含义在后面章节介绍

  • %d------整型
  • %f------浮点数输入%lf输出%f------高精度浮点数(比较特殊)
  • %s------字符串
  • %c------字符
  • %p------指针
  • %e------科学计数法
  • %g------小数或科学计数法

1.4 输出格式

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

1.4.1 限定宽度

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

#include<Stdio.h>
int main ()
{
  printf("%d\n",123);     //输出为"123"
  printf("%5d\n",123);    //输出为"  123"(最少打印5位)
  printf("%05d\n",123);   //输出为"00123"
  printf("%5d\n",123456789); //输出为"12345"(数据如果超过5位,就按照实际位数打印)
  printf("%-5d\n",123);  //输出为"123  "
  return 0;
}

输出的值是默认是右对齐,即输出内容前面会有空格;如果希望改成左对齐,在输出内容后面添加空格,可以在占位符的%的后面插入一个-号

1.4.2 总显示正负号

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

上面实例中,%d可以确保输出的数值,总是带有正负号。

1.4.3 限定小数位数

输出小数时,有时希望限定小数的位数。举例来说,希望小数点后面只保留两位,占位符可以写
成%.2f

#include<stdio.h>
int main()
{
  printf("%f\n",123.456);    //输出为"123.456000"(小数打印默认后六位)
  printf("%.2f\n",123.456);  //输出为"123.46"
  printf("%12f\n",123.456);  //输出为"123.456000"
  return 0;
}

1.4.4 输出部分字符串

%s 占位符用来输出字符串,默认是全部输出。如果只想输出开头的部分,可以⽤ %.[m]s指定输出的长度,其中[m] 代表⼀个数字,表⽰所要输出的⻓度。

#include<stdio.h>
int main()
{
  printf("%s\n","abcdef");   //输出为"abcdef"
  printf("%.3s\n","abcdef"); //输出为"abc"
  return 0;
}

二、scanf

vs中首次使用scanf会报错,需要加头文件**#define _CRT_SECURE_NO_WARNINGS** (将此代码放在代码的第一行

在这里插入图片描述

当我们有了变量,我们需要给变量输入值就可以使用scanf函数了,如果需要将变量的值输出在屏幕上的时候就可以使用printf函数,下面看一个例子:

#include <stdio.h>
 int main()
{
 int score = 0;
 printf("请输⼊成绩:");
 scanf("%d", &score);
 printf("成绩是:%d\n", score);
 return 0;
}

运行截图:
在这里插入图片描述
图画演示:
在这里插入图片描述

2.1 基本用法

scanf( )函数用于读取用户的键盘输入。
程序运行到这个语句时,会停下来,等待用户从键盘输入。
用户输入数据,按下回车键后,scanf()就会处理用户的输入,将其存入变量。
scanf()语法跟printf()类似。

int i = 0;
printf("%d",&i);  //&取地址

上面示例中,scanf ( ) 的第⼀个参数%d ,表示用户输入的应该是⼀个整数。%d就是⼀个占位符,%是占位符的标志,d表示整数。第⼆个参数&i表示,将用户从键盘输⼊的整数存入变量i。

下面我们看几个例子:

int main()
{
	int i = 0;
	int j = 0;
	float x = 0;
	float y = 0;
	scanf("%d%d%f%f", &i, &j, &x, &y);
// 输入1 3 3.5 -4.0e3
	printf("i = %d\n", i); // i = 1
	printf("j = %d\n", j); // j = 3
	printf("x = %f\n", x); // x = 3.500000
	printf("y = %f\n", y); // y = -4000.000000

	return 0;
}

scanf( )处理用户输入的原理是:用户的输入先放入缓存,等到按下回车键后,按照占位符对缓存进行解读。解读用户输入时,会从上一次解读遗留的第一个字符开始,直到读完缓存,或者遇到第一个不符合条件的字符为止。
在这里插入图片描述
在这里插入图片描述

2.2 scanf的返回值

scanf( ) 的返回值是⼀个整数,表示成功读取的变量个数。
如果没有读取任何项,或者匹配失败,则返回0。
如果在成功读取任何数据之前,发⽣了读取错误或者遇到读取到⽂件结尾,则返回常量EOF(-1)。
EOF-end of file ⽂件结束标志

int scanf的四种形式

#include<stdio.h>
int main
{
 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);
 return 0 ;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3 占位符

scanf( ) 常⽤的占位符如下,与printf() 的占位符基本⼀致。
• %c:字符。
• %d:整数。
• %f :float 类型浮点数。
• %lf:double 类型浮点数。
• %Lf:long double 类型浮点数。
• %s:字符串。

#include <stdio.h>
int main()
{
  char name[11];
  scanf("%10s", name);
  return 0;
}

上面实例中,name是一个长度为11的字符数组,scanf()的占位符%10s表示最多读取用户输入的10个字符,后面的字符将被丢弃,这样就不会有数组溢出的风险了。

2.4 赋值忽略符

有时,用户的输⼊可能不符合预定的格式。

#include <stdio.h>
int main()
{
 int year = 0;
 int month = 0;
 int day = 0;
 scanf("%d %d %d", &year, &month, &day); //情况一:2024 10 10
 printf("%d/%d/%d",year,month,day);      //输出:2024/10/10
 scanf("%d %d %d", &year, &month, &day); //情况二:2024/10/10
  printf("%d/%d/%d",year,month,day);    //输出:2024/0/0  (报错)
 return 0;
}

为了避免这种情况,scanf ( ) 提供了⼀个赋值忽略符(assignment suppression character)
只要把*加在任何占位符的百分号后⾯,该占位符就不会返回值,解析后将被丢弃。

#include <stdio.h>
int main()
{
 int year = 0;
 int month = 0;
 int day = 0;
 scanf("%d%*c%d%*c%d", &year, &month, &day);
 return 0;
}

上面示例中,% * c 就是在占位符的百分号后⾯,加⼊了赋值忽略符 * ,表示这个占位符没有对应的变量,解读后不必返回。


总结

10/30 完结
10月的最后一篇博客,本月共完成4篇笔记
制作不易,感谢投币

标签:10,25,int,scanf,占位,输出,printf,main
From: https://blog.csdn.net/weixin_64957584/article/details/143372491

相关文章

  • 2024/10/30
    今天学习了对页面输入内容的约束写法/提交日报逻辑document.getElementById('submitForm').addEventListener('submit',function(e){e.preventDefault();letbatch=document.getElementById('batch').value;letworkerId=document.getElementById('w......
  • 性能分析202410月
    https://www.cnblogs.com/yungyu16/p/13032994.htmlhttps://mytechshares.com/2022/04/06/why-time-source-impact-performance/https://github.com/hust-open-atom-club/linux-insides-zh/blob/master/Misc/linux-misc-1.mdhttps://github.com/0voice/Understanding_in_Ru......
  • SS241030C. 桥梁(bridge)
    SS241030C.桥梁(bridge)题意本人小时候也分不清fridge和bridge给你\(n\)个点,\(m\)条边的图,边带权。有\(q\)个要求。每个要求给出\(a_i,b_i\),要求至少选中第\(a_i\)或\(b_i\)条边。问最小代价选边使得图连通。solution注意到\(q\le16\),可以直接枚举每个要求必......
  • 代码随想录算法训练营第十二天| 226.翻转二叉树、101. 对称二叉树、104.二叉树的最大
    226.翻转二叉树题目链接:.-力扣(LeetCode)文章讲解:代码随想录视频讲解:听说一位巨佬面Google被拒了,因为没写出翻转二叉树|LeetCode:226.翻转二叉树_哔哩哔哩_bilibili《代码随想录》算法公开课开讲啦!快来打卡!本期视频的文字讲解版在「代码随想录」刷题网站:programmercarl.com......
  • 代码随想录算法训练营第十三天| 110.平衡二叉树、257. 二叉树的所有路径、404.左叶子
    110.平衡二叉树题目链接:.-力扣(LeetCode)文章链接:代码随想录视频链接:后序遍历求高度,高度判断是否平衡|LeetCode:110.平衡二叉树_哔哩哔哩_bilibili《代码随想录》算法公开课开讲啦!快来打卡!本期视频的文字讲解版在「代码随想录」刷题网站:programmercarl.com,这里刷题顺序,详......
  • 10.28 ~ 11.3
    10.28返校日。晚上到了校之后就开始看大家的游击,然后\(\text{Huge}\)让我们写总结;于是就顺便把游记写了......
  • 20222420 2024-2025-1 《网络与系统攻防技术》实验三实验报告
    202224202024-2025-1《网络与系统攻防技术》实验三实验报告1.实验内容1.1本周学习内容1.1.1后门技术接着上一节课的内容继续学习了进程隐藏技术,它还包含基于DLL的进程隐藏技术:远程注入Dll技术基于远程线程注入代码的进程隐藏技术Rootkit方式分用户级和内核级......
  • 20222424 2024-2025-1 《网络与系统攻防技术》实验三实验报告
    202224242024-2025-1《网络与系统攻防技术》实验三实验报告1.实验内容(1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧正确使用msf编码器,使用msfvenom生成如jar之类的其他文件veil,加壳工具使用C+shellcode编程(2)通过组合应用各种技术实现恶......
  • 2024-10-30 学习人工智能的Day18
    Python包和模块当使用Python编程时,包(Packages)和模块(Modules)是两个关键的概念,它们有助于组织、管理和复用代码。1.模块(Modules)1.1什么是模块一个.py文件就是一个模块模块是含有一系列数据,函数,类等的程序作用把相关功能的函数等放在一起有利于管理,有利于多人合作开......
  • [ windows权限维持 ] 利用永恒之蓝(MS17-010)漏洞取靶机权限并创建后门账户
    ......