c++知识点合集已经完成欢迎前往主页查看,点点赞点点关注不迷路哦
点我进入c++第一章知识点合集
MYSQL知识点持续更新中
MYSQL第一章节DDL数据定义语言的操作----点我进入
MYSQL第二章节DDL-数据库操作语言 DQL-数据查询语言----点我进入
MYSQL-第三章节DCL-管理用户,控制权限----点我进入
MYSQL-第四章节常用函数说明----点我进入
目录
第二章知识点合集
getchar和putchar函数的用法
字符输入函数getchar:
getchar():
例子
字符输出函数putchar
例子
getchar函数和putchar函数与scanf函数和printf函数的区别
gets()和puts()函数的用法
scanf()和gets()比较
两者在接受字符串时:
算法和流程图
传统流程图
传统流程图举例
三种基本结构
用N-S流程图表示
用伪代码表示算法
概述
使用scanf的注意事项
1) 参数的个数一定要对应
输入的数据类型一定要与所需要的数据类型一致
关于缓冲区
将 %d 换成 %c
%d遇到空格、回车、Tab 键
在使用 scanf 之前使用 printf 提示输入
小结
%f %2f %.2f
例如:
%m.nf
Print(“%*3d”) 与 %md
字符输入函数getchar:
getchar函数是从标准的输入设备(如键盘)上输入一个字符,不带任何参数,格式为:
getchar():
getchar函数将输入的第一个字符作为函数的返回值,通常使用这个函数时,将函数的返回值赋予一个字符变量或者整型变量。
#include //getchar是C语言的标准库函数直接调用即可
main()
{ char ch;
ch = getchar();
printf("%c %d\n",ch,ch);
printf("%c %d\n",ch-32,ch-32);
return 0;
}
程序运行时输入 abc。
得到的结果是:a 97
A 65
总结:
在getchar函数中只把输入的第一个字符作为函数的返回值,所以在代码中输入了abc三个字符,只返回了a的值。
在执行代码时,先以字符的形式输出ch,然后进行数据的强制转换,再将ch以整型的形式输出。字符型数据向整型数据转换时,实质上是将字符型数据转换成与该字符相对应的十进制ASCII码值。a的ASCII码值是97,将a转换后就输出了97。A的ASCII值是65,输出的便是65。
字符输出函数putchar
putchar函数是向标准输出设备(屏幕)上输出一个字符的C语言标准函数,格式为:
putchar(ch);
ch可以是变量、常量,转义字符或表达式。数据类型可以是字符型或整型。当ch是整型数据时,输出的是与其相对应的ASCII码值。
#include
main()
{ int p;
char q; //此时定义的是字符变量,不是字符串,所以只能将一个字符的值赋予q
p=98;
q='a';
putchar(p);
printf("\n");
putchar(q);
return 0;
}
执行的结果就是:b a
Char ch;
ch=getchar() 与 scanf(“%c”,&ch)的效果一样都是输入一个字符。
putchar(ch); 与 printf(“%c”,ch) 的效果一样都是输出一个字符。’
由于getchar函数和putchar
函数只处理字符,不需要转换说明,所以它们比更加通用的scanf函数和printf函数更高效
gets()从标准设备读取字符直到遇到换行符(‘\n’)为止;
puts()将buffer中的字符输出到标准输出,直到遇到空字符(’\0’)为止
gets():
gets是字符串数组操作,使用前必须定义字符串数组。char ch[10]; //定义一个空的字符数组名字为ch,最大容量为10个字符。
gets(ch); //将键盘输入的字符存放在数组ch中。
puts(ch); //打印出ch数组里面的各个元素。
char a[13];
scanf("%s",a);
printf("%s",a) ;
scanf虽然也能输入字符串,但是遇到空格就停止了。
1.不同点:
scanf不能接受空格、Tab、等;
gets能够接受空格、Tab等;
2.相同点:
字符串接受结束后自动加’\0’。
scanf :当遇到回车,空格和tab键会自动在字符串后面添加’\0’,但是回车,空格和tab键仍会留在输入的缓冲区中
gets:可接受回车键之前输入的所有字符。
求5!,用伪代码表示。
begin (算法开始)
1=>p
2=>I
while i≤5
{ p*i=>p
i+1=>I
}
print p
end (算法结束)
scanf 的功能用一句话来概括就是“通过键盘给程序中的变量赋值”。
它有两种用法,或者说有两种格式。
scanf("输入控制符", 输入参数); scanf(“%d”,&i);
功能:将从键盘输入的字符转化为“输入控制符”所规定格式的数据,然后存入以输入参数的值为地址的变量中。
#include
int main(void)
{
int i;
i = 10;
printf("i = %d\n", i); //输出控制符
return 0;}
# include
int main(void)
{
int i;
scanf("%d", &i); //&i 表示变量 i 的地址,& 是取地址符 输入控制符号
printf("i = %d\n", i); 输出控制符号
return 0;}
scanf("输入控制符非输入控制符", 输入参数);
# include
int main(void)
{
int i;
scanf("i = %d", &i);// i=必不可少
printf("i = %d\n", i);
return 0;
}
在 printf 中,所有的“非输出控制符”全部都要原样输出。同样的,在 scanf函数中 中,所有的“非输入控制符”都要原样输入。所以在输入的时候i=同样需要要原样输入。比如要从键盘给变量 i 赋值 123,那么必须要输入i=123才正确,一个都不可少,否则就会出错。
# include
int main(void)
{
int i, j;
scanf("%d%d", &i, &j);
printf("i = %d, j = %d\n", i, j);
return 0;
}
方便简单
之前讲过 printf 的 “输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”一定要相互对应。同样scanf 也遵循该原则,也就是“输入控制符”和“输入参数”无论在“顺序上”还是在“个数上”也是要相互对应。例如:
# include
int main(void)
{
char ch;
int i;
scanf("%c%d", &ch);
printf("ch = %c, i = %d\n", ch, i);
return 0;
}
# include
int main(void)
{
int i = 97;
printf("i = %c\n", i);
return 0;
}
但在 scanf 中,对于从键盘输入的数据的类型、scanf 中“输入控制符”的类型、变量所定义的类型,这三个类型一定要相同,否则就是错误的。但是编译的时候不会报错,但从程序功能的角度讲是错误的,所以无法实现我们想要的功能。例如:
# include
int main(void)
{
int i;
scanf("%d", &i);
printf("i = %d\n", i);
return 0;
}
输入a
在 scanf 中,从键盘输入的数据,不管是数字、字母,还是空格、回车、Tab 等字符等等,都会被当作数据存入到缓冲区。存储的顺序是先输入的排前面,后输入的依次往后排。按回车键的时候 scanf 开始进入缓冲区取数据,从前往后依次读取。
不但如此,前面讲过,你从键盘输入 123,这个不是数字 123,而是字符 '1'、字符 '2' 和字符 '3',它们依次排列在缓冲区中。因为每个字符变量 char 只能放一个字符。所以输入“123”之后按回车,scanf 开始进入缓冲区,按照次序,先取字符 '1',如果还要取就再取字符 '2',以此类推
但是如果 %d 遇到字母,那么它不会跳过并且也不会取用,而是直接从缓冲区跳出。所以上面这个程序,虽然 scanf 进入缓冲区了,但是用户输入的是字母 a,所以它什么都没读取到就跳出来了,而变量 i 没有值,即没有初始化,但如果将 %d 换成 %c,那么任何数据都会被当作一个字符,不管是数字还是空格、回车、Tab 键它都会取回。
但 scanf 中 %d 只可以识别“十进制整数”。对 %d 而言,空格、回车、Tab 键都是区分数据与数据的分隔符。当 scanf 进入缓冲区中取数据的时候,如果 %d 遇到空格、回车、Tab 键,那么它并不会读取调用,而是跳过继续往后取后面的数据,直到取到“十进制整数”为止。对于被跳过和取出的数据,系统会将它从缓冲区中释放掉。未被跳过或取出的数据,系统会将它一直放在缓冲区中,直到下一个 scanf 来读取。
# include
int main(void)
{
int i, j;
printf("请输入两个值,中间以空格分隔:");
scanf("%d%d", &i, &j);
printf("i = %d, j = %d\n", i, j);
return 0;
}
代码的可读性和完整性
scanf 的使用看似细节繁杂,但使用起来非常简单。就目前而言,只要掌握以下五点:
- 在 scanf 的“输入参数”中,变量前面的取地址符&不要忘记。
- scanf 中双引号内,除了“输入控制符”外最好什么都不要写。
- “输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”一定要一一对应。
- “输入控制符”的类型和变量所定义的类型一定要一致。对于从键盘输入的数据的类型,数据是用户输入的,程序员是无法决定的,所以在写程序时要考虑容错处理。
- 使用 scanf 之前最好先用 printf 提示输入。
%2f是把float的所有位数输出2位,包括小数点,如果不组2位,补0,如果超过2位,按照实际输出
%.2f是float后的小数只输出两位。
printf("%2f, %2f, %.2f",123.1, 123.123, 123.123);
输出就是:123.100000, 123.123000,123.12
在C语言的输出中,%m.nf意义:1、f表示输出的数据是浮点数;2、n表示输出的数据保留小数点后n为小数,第n+1位四舍五入,若不足n位则补0;3、m表示输出数据在终端设备上占有m个字符,并右对齐,如果实际的位数小于m时,左边用空格补足,如果实际位数大于7时,向右扩展输出。
当m>实际输出的值的列数则左补空格,m<实际输出的值的列数则按原值打印就好