C语言学习笔记

大学时候学习了点C语言,本就学得浅显,现在也忘得差不多。只是记得几个循环,简单的输入输出,现在重新系统学习C语言,这么多年的失败学习经验告诉我,学习某个方面的东西,一定要系统且要注重细节,即掌握总分总的知识架构,而且要反复多次学习。
这次学习的内容有:数据类型,数组,指针,函数,文件,结构体和共用体等,后面关于C语言的知识会随时补充。
另需注意C语言编程格式:
在这里插入图片描述

一.数据类型

在这里插入图片描述

1.常量和变量

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

2.类型转换

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

二.数据输入输出

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述char c[10];
scanf("%s",c);//字符串中不能有空格,否则只读到第一个空格前的内容,但是字符串前面可以有空格。

#include <stdio.h>
#include <string.h>
int main(){

		int n;
	int i=0;
	char c;
	char s[10];
	scanf("%d",&n);
	s[n]='\0';
	while(n>0){
		fflush(stdin);
		scanf("%c",&c);
	
		s[i++]=c;
		n--;
	}

	printf("%s",s);
	return 0;
}
#include <stdio.h>
#include <string.h>
int main(){

		int n;
	int i=0;
	char c;
	char s[10];
	scanf("%d",&n);
	s[n]='\0';
	while(n>0){
	
		scanf("%c",&c);
		if(c=='\n')
			continue;
		s[i++]=c;
		n--;
	}

	printf("%s",s);
	return 0;
}

以上两套代码都可正常换行输入。fflush(stdin)函数非常重要,在以后的多次换行输入程序中都要用上!

在这里插入图片描述说明scanf()函数会读取上一次存留的换行符‘\n’ ,换行符会读入到缓冲队列。

	for(i = 0; i < 10; i++)
	 {
		scanf("%d", &num[i]);
	} 
	scanf("%d %d %d %d %d %d %d %d %d %d",&c[0],&c[1],&c[2],&c[3],&c[4],&c[5],&c[6],&c[7],&c[8],&c[9]);

上面两个接受是等价的

使用getchar()函数:

#include <stdio.h>
#include <string.h>
int main(){
	int n;
	int i=0;
	char c;
	char s[10];
	scanf("%d",&n);
	s[n]='\0';
	while(n>0){
		
		c=getchar();
		if(c=='\n')
			continue;//退出本次判断,继续重新循环
		s[i++]=c;
		n--;
	}
	printf("%s",s);
	return 0;
}

结果:
在这里插入图片描述当程序调用getchar时.程序就等着用户按键。用户输入的字符被存放在键盘缓冲区中。直到用户按回车为止(回车字符也放在缓冲区中)。当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符。如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取。也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键。打个比方,键盘缓冲区就像是一条水管连着你的程序,程序调用getchar()函数用户输入字符就相当于往水管里注水,这个水注多少取决于你输入多少,当你按回车停止注水时,getchar()函数才会开始从键盘缓冲区,也就是我们的水管里取水,那每次只会读一个字符也就是每次取一定量的水,当你在这之后继续调用getchar()函数时,会接着在水管里取上次没用完的水,因为你的水管没清空(缓冲区的刷新),那这个阶段就不用你再输入了,因为一调用getchar()函数就有水可取嘛,直到水管里没水了,你还调用getchar()函数,那这个时候你就得注水了也就是程序会等你按键。

scanf()函数和getchar()函数在吸收单字符时功能和过程都一样,都会吸收上一次残留在缓冲区中的换行符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值