首先,明确一下标准输入,标准输出,标准错误输出这三个概念与键盘输入,显示器输出的区别,只是因为我们通常默认标准输入是键盘,标准输出和标准错误输出是显示器而已,其他的就没有太大关联了。

//程序保存在lianxi.c文件中,putchar()与getchar()字符输入输出
#include<stdio.h>
int main()
{
char number[20];
int j,i=0;
while((number[i]=getchar())!=EOF)++i;
printf("the number i is %i\n",i);//检查输入了几个字符,若是用键盘输入,则使用ctrl+d组合输入EOF
for(j=0;j<i;j++)//因为最后输入结束时按下enter后再输入ctrl+d,所以字符串最后一个字符是换行符printf("%c",number[j]);
}

如果直接编译运行lianxi.c,则输入由键盘,
可以使用重定向 /lianxi < infile (将infile中的数据作为标准输入给程序)

格式化输出
int printf(char* format,变元1,变元2,…)//printf函数描述
int sprintf(char* string,char* format,变元1,变元2,…)//sprintf与printf一样,只是把结果保留在字符串string中,而不是作为标准输出

char* format 叫做格式化字符串,包括普通字符和格式转换规格说明

例如:printf(”this is the number i %3i\n”,i);其中每一个转换规格说明都从%开始,以一个转换字符结束,这两者中间可以加有一些说明成分

//格式化输出输入
#include<stdio.h>
int main()
{
char number[]="hello world";printf("%s\n",number);//
printf("%-s\n",number);//负号表示左对齐输出
printf("%25s\n",number);//数字25表示最少占据的子宽为25,这样不加负号就会靠右
printf("%10.5s\n",number);//小数点用于分隔字宽和精度,5表示字符串最多打印5个字符,或者浮点数小数点后保留5位
}

结果如下:

格式化输入
int scanf(char* format,…(变元))//格式化输入函数形式,变元必须是指针
int sscanf(char* string,char* format,…)

char* format 叫做格式化字符串,包括普通字符和格式转换规格说明

格式化字符串可能出现的情况如下:
(1)空格或制表符,直接忽略
(2)普通字符,用于匹配输入流中下面尚待读入的非空白字符序列
(3)转换规格说明,由%开始,转换字符结束,中间可以有附加项

#include<stdio.h>
int main()
{
int day,year;
char name[10];scanf("%d %d",&day,&year);
//两个%d之间的空格没有任何影响,读取输入时也将忽略空白符(空格,换行,制符表等)
printf("day is %i, year is %i\n",day,year);
//即最后输入31 2014与31换行2014结果是一样的
}如果改成
scanf("%d haha %d",&day,&year);//可以看到如果我输入31 haha 2015 则正确输出,若是直接输入31 2015 则输出只能把31正确输出

结果如下

//scanf()小的注意点
int main()
{
char number;scanf("%1s",&number);//表明忽略输入的空白符,即输入一个空白符不会给number
//scanf("%c",&number);//不忽略空白符
printf("%c\n",number);
}

scanf()给我的感觉就是,你要在”“这个里面有正确的格式,这样程序运行时,它会从输入流中一个个读取相应的数据给变元,遇到空字符要根据情况而定是不是读取这个空字符(一般是忽略的),最后如果正确读完就OK,发现有不对的数据格式,就停止。

//读取一个字符串遇到的问题
#include<stdio.h>
int main()
{
char* number;scanf("%s",number);
printf("%s\n",number);
}//以下为程序运行出错,说segmentation fault,我大概理解为没有检查边界问题,指针改成字符数组就好了

以上都是操作系统给我们的标准输入,标准输出的接口,下面简单谈论一下之前讨论过的文件读取与写入相关内容

//读取文件内容
#include<stdio.h>
int main()
{FILE* fp;//文件指针,FILE*类型定义在<stdio.h>中int c;fp=fopen("infile.txt","r");//fopen()返回FILE*类型while((c=getc(fp))!=EOF)//getc(FILE*)返回文件中的下一个字符,遇到文件结束或错误,返回EOFprintf("%c",c);printf("\n");
}
//这样一来,就可以如下定义,因为stdin就是标准输入指针,stdout就是标准输出指针
#define getchar()  getc(stdin)
#define putchar(c) putc((c),stdout)
//从不同的文件中读取到标准输出,没有检查错误机制
#include<stdio.h>
void filecopy(FILE* ifp,FILE* tfp)//将ifp指向的文件内容复制到tfp指向的文件中去
{char c;while((c=getc(ifp))!=EOF)putc(c,tfp);
}
int main(int argc,char* argv[])//采用可变参数类型
{FILE* fp;if(argc==1)filecopy(stdin,stdout);elsewhile(--argc>0){ fp=fopen(*++argv,"r");filecopy(fp,stdout);fclose(fp);}
return 0;
}

行输入输出相关

char* fgets(char *line,int maxline,FILE* fp)
/*fgets函数从fp所指向的文件中读取下一个输入行(包括换行符,并将它放在字符数组line中,最多可以读取maxline-1个字符,所读取的行以空字符‘\0’结尾),正确时返回line,错误时返回NULL*/对比gets()是在stdin上操作,且不包括换行符int fputs(char* line,FILE* fp)
/*将字符串写入到文件中,若有错误返回EOF,没有则返回0*/对比puts()是在stdout上操作,且添加一个换行符

C语言输入,输出那些事相关推荐

  1. C 语言编程 — 输入/输出与文件操作

    目录 文章目录 目录 前文列表 输入/输出 scanf() 和 printf() getchar() 和 putchar() 文件操作 打开文件 关闭文件 写入文件 读取文件 二进制 I/O 函数 前 ...

  2. C语言 输入一个字符串,统计字符个数,并按照倒序输出该字符串。

    题目:C语言 输入一个字符串,统计字符个数,并按照倒序输出该字符串. #include<stdio.h>void main() {char str[10];scanf("%s&q ...

  3. C语言再学习 -- 输入/输出

    一.缓冲区 输入字符的立即回显是非缓冲或直接输入的一个实例,它表示你说键入的字符被收集并存储在一个被成为缓冲区的临时存储区域中.按下回车可使你所键入的字符块对程序变成可用. 为什么需要缓冲区?首先,将 ...

  4. c语言在一组数据中找最大值最小值,用c语言输入一组数据,输出最大最小值,求c语言程序讲解: 输入一组数据,求最大值,最小值,和,平均...

    问题标题 用c语言输入一组数据,输出最大最小值,求c语言程序讲解: 输入一组数据,求最大值,最小值,和,平均 2019-7-3来自ip:18.156.193.207的网友咨询 浏览量:318 手机版 ...

  5. c语言缩写一个人的名字,用C语言输入一个人的英文名字统计个数输出

    用C语言编写判断输入的某个数m是否为素数 //判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是不是素数!#include#includemain(){i ...

  6. c语言输入10个数从小,C语言中,从键盘输入10个数,从小到大排列输出,怎

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:C语言中,从键盘输入10个数,从小到大排列输出,怎么写啊,最好注回答:#includestdio.h void swap(int * ...

  7. C语言基础之4:字符串和格式化输入/输出

    Tips1 函数:strlen() 关键字:const 字符串 如何创建.存储字符串 如何使用strlen()函数获取字符串的长度 用C预处理器指令#define和ANSIC的const修饰符创建符号 ...

  8. c语言编写程序,输入正整数n,计算0到n以内所有奇数的和,c语言输入正整数n,计算1~n中的奇数和以及偶数和并输出....

    用C语言编写程序,输入一个正整数n(1 #include"stdio.h"intmain(){\x09inti,j,n;\x09inta[12];\x09intmin,mx;\x0 ...

  9. 偶数乘2奇数乘3C语言,输入一个整数x,如果为偶数乘2,否则乘3,然后输出.C语言

    编写一个程序,输入一个正整数,并做以下运算:如果为偶数,除以2,如果为奇数,乘3加1.得到的结果再按上 本人不会C#,算法相通,用c语言演示一下:#includevoidmain(void){intz ...

  10. C语言 输入一个华氏温度F,要求输出摄氏度C。

    C语言 输入一个华氏温度F,要求输出摄氏度C. 公式为: C=5/9(F-32) 代码: #include <stdio.h> void main(){ float C,F; printf ...

最新文章

  1. 第五期直播《聊聊目标检测和秋招那些事》精彩回顾
  2. 实战篇-简单多语言的实现
  3. 人月神话贯彻执行_DNF:希洛克团本真有那么难吗?没有神话都不够格进团?_电竞...
  4. oracle for函数,oracle分区表述的FOR语句(一)
  5. 在Linux中使用matplotlib进行科学画图
  6. RabbitMQ的三大交换器详解
  7. JAVA编写的使用Socket模拟Http的GET操作
  8. 高分四号(GF4)——预处理(辐射定标、大气校正、正射校正、图像配准)
  9. python温度转换
  10. jmeter面试题及答案(jmeter接口自动化测试面试题)
  11. 优酷KUX格式视频如何快速转换MP4格式
  12. excel做ns流程图_NS流程图是什么图?用这款软件轻松画NS流程图
  13. 连接数据库显示: Access denied for user ‘root‘@‘locahost‘(using password:YES)解决方式。
  14. android 读写文件 简书,Android 读取asset文件
  15. Linux学习笔记——文件IO
  16. 记一次微信公众号开发过程
  17. Proftpd安装与配置
  18. 面试题:为什么索引要使用B+树而不使用其他索引?以及B+树为什么更矮胖
  19. 正则验证邮箱、8到16位数字字母特殊符号组合
  20. 2021年12月中国A股上市企业股价涨幅排行榜:三羊马涨幅最大,从事传媒行业的企业最多(附月榜TOP100详单)

热门文章

  1. JAVA软件工程师就业前景
  2. 编程计算两个数的最大公约数
  3. 面试题--字符串指针与字符串数组的区别char* st=abc;与char* str[]=abc;的异同
  4. Xshell使用及训练深度学习模型;PyCharm连接服务器
  5. hdoj 1434 幸福列车 【优先队列】
  6. MySql复合索引失效的几种情况
  7. 适合linux的软件
  8. dnn降噪_KTV办公不是梦,漫步者DreamPods新型AI骨传通话降噪黑科技揭秘
  9. 周期脉冲 matlab,矩形周期脉冲信号MATLAB实现
  10. 前端爱好者的小白学习之路-2【补充】 学会HTML你能写出来什么样子的页面?