C语言----输入输出专题

本文详细介绍了C语言中的`printf`和`scanf`函数使用,包括格式化输出、预定义宏`FILE`, `FUNCTION`, `LINE`在代码调试中的应用,以及输入时的注意事项和常见问题。强调了`scanf`可能导致的缓冲区溢出和处理连续输入的策略。
摘要由CSDN通过智能技术生成

输入输出专题

printf

char ch=65;
%c--A   %d---65    
  • printf的常用修饰符
int i=255;
char ch[size]="helloworld";
printf("i=%#o,i=%#x,i=%+d\n",i,i,i);
printf("ch=%010.5s",ch);//有警告 %s时0补位不管用,%-10.5%s是👉靠齐
  • gcc编译器预定义宏(FILE,FUNCTION,LINE)用于输出跟踪代码,定位代码行
printf("[%s:%d] while before.\n",__func__,__LINE__);
while(1);
printf("[%s:%d] while after.\n",__func__,__LINE__);

scanf

  • scanf----1------%s
char str[size];       
int i,j;
			   //-------------危险慎用!!!!!
scanf("%s",str);//1.不用str取地址 2.遇到 空格,TAB,回车 代表结束。(hello world)只输出(hello)
			   //3.当size=3时,默认你只可输入 he(√) hello(×),但是---程序跑起来看着hello对了,其实你已越界了。 
printf("%s\n",str);
scanf("%d%d",&i,&j);//1.遇到 空格,TAB,回车 不代表结束。
printf("%d,%d\n",i,j);
  • scanf----2--------循环
//循环中用scanf易崩程序,得判错(返回值--成功返回的个数)
int i;                   
while(1)
{
printf("please enter: ");
int ret=scanf("%d",&i);//a时,code未崩。
if(ret!=1)
{
printf("Enter err\n");
break;
}
printf("%d\n",i);
}
  • scanf----3----抑制符
//连续输入慎用
int i;
char ch;
printf("please enter: ");
scanf("%d %c",&i,&ch);      
printf("i=%d,ch=%c\n",i,ch);
/*-----------------------------------------------------*/
please enter: 12 c
i=12,ch=c
/*-----------------------------------------------------*/
  
scanf("%d%c",&i,&ch);
printf("i=%d,ch=%c\n",i,ch); 
printf("i=%d,ch=%d\n",i,ch);
/*-----------------------------------------------------*/
please enter: 12 c
i=12,ch= 
i=12,ch=32
/*-----------------------------------------------------*/

上述情况1

//吃字符的解决办法
/*-------------------------1--------------------------*/
scanf("%d%*c%c",&i,&ch);//仅能抑制一个字符
/*-------------------------2--------------------------*/
getchar();//仅能吃掉一个字符
getchar/putcahr
int ch;
ch=getchar();
putchar(ch);//不会自动换行
putts/gets
//gets----危险----有超出数组限制,乱占其他内存风险
char str[size];
gets(str);
puts(str);
//事实上gets只能读size-1个字符,默认尾加'\0',同时遇到换行就结束.

  1. 空格=32,TAB=9,enter(回车)=10,,三类字符 ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值