c语言--输入输出

c语言本身没有输入输出语句

格式化输出

%o :八进制
%x :十六进制
%d :十进制
%m.nf :输出的数字总共占有m个,其中n个为小数,在左边补零
%-m.nf :在右边补空格
%0md:在左边补上0得到m个数字

int main(){
	printf("s1=*%5s*\n","chi");//s1=*  chi*
	printf("s1=*%-5s*\n","chi");//s1=*chi  *
	printf("s1=*%05s*\n","chi");//s1=*00chi*
	printf("\n"); 
	
	printf("s2=*%5d*\n",342);//s2=*  342*
	printf("s2=*%5ld*\n",342);//s2=*  342*
	printf("\n"); 
	
	printf("s3=*%5d*\n",-342);//s3=* -342*
	printf("s3=*%-5d*\n",-342);//s3=*-342 *
	printf("s3=*%+5d*\n",-342);//s3=* -342*
	printf("\n"); 
	
	printf("s4=*%05d*\n",-342);//s4=*-0342*
	printf("s4=*%+05d*\n",-342);//s4=*-0342*
	printf("s4=*%-05d*\n",-342);//s4=*-342 *
	printf("\n"); 
	
	printf("s5=*%5o*\n",342);//s5=*  526*
	printf("s5=*%#5o*\n",342);//s5=* 0526*
	printf("s5=*%05o*\n",342);//s5=*00526*
	printf("s5=*%+05o*\n",342);//s5=*00526*

}

在这里插入图片描述

%#x

%#x需要表明是八进制数还是十六进制

int main(){
	int a=252;
	printf("a=%o a=%#o\n",a,a);
	printf("a=%x a=%#x\n",a,a);
	}

在这里插入图片描述

# include <stdio.h>

int main(void)
{
    int  x=47;  //47是十进制
    
    printf("%x\n", x);        //输出结果是:  2f
    printf("%X\n", x);        //输出结果是:  2F
    printf("%#X\n", x);      //输出结果是: 0X2F
    printf("%#x\n", x);      //输出结果是: 0x2f
    return 0;
}

%+

int main()
{
    double a=0.004;
    double b=0.005;
    double c=-0.004;
    double d=-0.005;
    printf("a=%.2f  b=%.2f  c=%.2f  d=%.2f\n",a,b,c,d);
    printf("a=%+.2f  b=%+.2f  c=%+.2f  d=%+.2f\n",a,b,c,d);
    return 0;
}


分析:
如果数字是正数,即输出+号
如果数字是负数,即先输出-号再输出绝对值

在这里插入图片描述

%e和%f

%e小数点后的有6个数,e+000总共占5个
%f可以四除五进

printf("%e\n",3.1415);
printf("%f\n",3.1415);
printf("%4.3f\n",3.1415);

在这里插入图片描述

printf的返回值

printf返回值是打印的字符的个数

	int t=0;
	while(printf("*")){
		t++;
		if(t>1)break;
	}    //**
	printf("\n%d\n",t);//2

	
	t=0;
	while(printf("+")){
		if(t++>1)break;
	}   //+++
	printf("\n%d",t);//3
	
	while(printf("")){//返回0
		printf("hello");
	}

printf遇到\0即停

char c[5]={'a','\0','b'};
printf("%s",c);
char a[]="c\0b";
printf("%s",a);

在这里插入图片描述

ASCII

	printf("%d\n",'a');//97
	printf("%d\n",'A');//65
	printf("%d\n",'0');//48

在这里插入图片描述

字符串的输入

https://blog.csdn.net/lord12580/article/details/82109850

1.char *name;
2.char name[81];

1,2 的不同点:
1.的指针在未进行初始化之前可能指向任何地方
2.已分配了81个字节的地址。 char *name; scanf(“%s”,name); // 错误 会将输入的字符串拷贝到任何地方可能会擦写掉程序中的数据或代码。
为字符串分配内存后便可读入字符串

没搞懂这道题???

#include<stdio.h>
#include<math.h>
#include <string.h>

char fun(char *s){
	char a[7];
	s=a;
	strcpy(a,"look");
}
int main(){
	char *p=NULL;
	fun(p);
	puts(p);
	return 0;
}

运行结果是不确定的值
在这里插入图片描述

scanf()函数。

弊端:只能读取一个单词。

原理:如果输入了空格会认为字符串结束,将空格后的字符作为下一个输入处理。

例如:

scanf("%s",name); 
输入:aas df 

会将aas放入地址中再在后面自动添加’\0’,并将df作为下一个输入处理。、

scanf中%c和%s的区别

对于%c来说 scanf()接收键盘输入的所有东西,遇回车结束输入 ,可以读入空格,句号。当scanf以%c接收一串字符时,每次只能接收一个字符,即单个字符。

可以得出%s读入字符串时:遇到空格,回车就会结束读入

	char c1,c2,c3,c4,c5;
	printf("输入\n");
	scanf("%c%c",&c1,&c2);//a<回车> 
	c3=getchar();//b
	c4=getchar();//空格 
	c5=getchar(); //c
	printf("输出\n");
	printf("%c,%c,%c,%c,%c\n",c1,c2,c3,c4,c5);//a,回车,b, ,c
	printf("%d,%d,%d,%d,%d",c1,c2,c3,c4,c5);//97,10,98,32,99
	
	char c6[10];
	printf("\n输入\n");
	scanf("%s",c6);//ab c
	printf("%s*",c6);//ab* 

在这里插入图片描述

2.gets()函数。

弊端:该函数只知道数组的开始处,并不知道数组的大小,如果输入的字符串过长容易溢出,可能擦写掉程序中的其他数据导致程序异常终止。

原理:读取整行的输入直至遇到换行符,然后丢弃换行符,储存其余字符,并在这些字符末尾添加一个空字符使其成为一个字符串。

3.fgets()函数。

gets()的参数只有数组的地址,而fgets()函数的参数有三个。

 fgets(将要输入字符串的地址,读入字符的最大数量,要读入的文件) 

通过第二个参数来限制读入字符的数量解决gets()的溢出的问题。
终止条件:①读入n-1个字符②遇到第一个换行符
原理:①终止在末尾添加一个空字符。
②终止保留换行符再在末尾添加一个空字符。
返回值:当读到文件末尾时返回空指针。

4.getchar()

	char c;
	while(c=getchar()){
		printf("%c",c);
		if(c=='\n') break;
	}

getchar可以接受空格
在这里插入图片描述

	char c;
	printf("%d\n",'\n');
	while(c=getchar()){
		printf("%d\n",c);
		if(c=='\n') break;
	}

getchar()可以接受回车,即\n,其ascii为10
在这里插入图片描述

5.puts()

自动在后面加上\n

	char *a="coda";
      char b[100]="you are the best one.";
      char *p;
      p=strcpy(b+8,a);
      puts(p);
      puts(b);
      puts(a);

在这里插入图片描述

char * strcpy(char *dst,const char *src)   
{
    if((dst==NULL)||(src==NULL))
         
           return NULL; 
 
    char *ret = dst; //[1]
 
    while ((*dst++=*src++)!='\0'); //[2]
 
    return ret;//[3]
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值