gets与scanf_C语言中两种字符串输入方法比较
2013-06-05 00:00
309 查看
在C语言中存在两种字符串输入方法:
第一种:gets()函数
--程序1---
1 #include <stdio.h>
2 #include <string.h>
3 int main()
4 {
5 int i;
6 char str[20];
7 for (i=0; i<20; i++)
8 {
9 str[i] = 'a';
10 }
11 gets(str);
12 printf("字符串str长度:%d\n", strlen(str));
13 printf("打印字符串:%s\n", str);
14 for (i=0; i<20; i++)
15 {
16 printf("第%d个字符:%c\n", i+1, str[i]);
17 }
18 return 0;
19 }
第二种:scanf()函数
--程序2-----------
1 #include <stdio.h>
2 #include <string.h>
3 int main()
4 {
5 int i;
6 char str[20];
7 for (i=0; i<20; i++)
8 {
9 str[i] = 'a';
10 }
11 scanf("%s", str);
12 printf("字符串str长度:%d\n", strlen(str));
13 printf("打印字符串:%s\n", str);
14 for (i=0; i<20; i++)
15 {
16 printf("第%d个字符:%c\n", i+1, str[i]);
17 }
18 return 0;
19 }
如果输入:hello回车
--程序1输出------------
字符串str长度:5
打印字符串:hello
第1个字符:h
第2个字符:e
第3个字符:l
第4个字符:l
第5个字符:o
第6个字符:
第7个字符:a
第8个字符:a
第9个字符:a
第10个字符:a
第11个字符:a
第12个字符:a
第13个字符:a
第14个字符:a
第15个字符:a
第16个字符:a
第17个字符:a
第18个字符:a
第19个字符:a
第20个字符:a
--程序2输出---------
字符串str长度:5
打印字符串:hello
第1个字符:h
第2个字符:e
第3个字符:l
第4个字符:l
第5个字符:o
第6个字符:
第7个字符:a
第8个字符:a
第9个字符:a
第10个字符:a
第11个字符:a
第12个字符:a
第13个字符:a
第14个字符:a
第15个字符:a
第16个字符:a
第17个字符:a
第18个字符:a
第19个字符:a
第20个字符:a
如果输入:hello空格world回车
--程序1输出----------------
字符串str长度:11
打印字符串:hello world
第1个字符:h
第2个字符:e
第3个字符:l
第4个字符:l
第5个字符:o
第6个字符:
第7个字符:w
第8个字符:o
第9个字符:r
第10个字符:l
第11个字符:d
第12个字符:
第13个字符:a
第14个字符:a
第15个字符:a
第16个字符:a
第17个字符:a
第18个字符:a
第19个字符:a
第20个字符:a
--程序2输出--------------
字符串str长度:5
打印字符串:hello
第1个字符:h
第2个字符:e
第3个字符:l
第4个字符:l
第5个字符:o
第6个字符:
第7个字符:a
第8个字符:a
第9个字符:a
第10个字符:a
第11个字符:a
第12个字符:a
第13个字符:a
第14个字符:a
第15个字符:a
第16个字符:a
第17个字符:a
第18个字符:a
第19个字符:a
第20个字符:a
分析:对于scanf()会过滤空格,不接受空格后面的字符。但gets()会接受。2个函数在给变量赋值时都会将
字符串最后一位变为'\0'。例如上面输入 hello回车 后,第6个字符打印时不显示,其实是'\0'这个字
符,这个字符在屏幕上打印不出来。如果我们输入一串超过20个的字符串,程序运行时会显示错误。
那么如何能让scanf()能接受空格呢?可以在scanf()进行格式控制
第一种:gets()函数
--程序1---
1 #include <stdio.h>
2 #include <string.h>
3 int main()
4 {
5 int i;
6 char str[20];
7 for (i=0; i<20; i++)
8 {
9 str[i] = 'a';
10 }
11 gets(str);
12 printf("字符串str长度:%d\n", strlen(str));
13 printf("打印字符串:%s\n", str);
14 for (i=0; i<20; i++)
15 {
16 printf("第%d个字符:%c\n", i+1, str[i]);
17 }
18 return 0;
19 }
第二种:scanf()函数
--程序2-----------
1 #include <stdio.h>
2 #include <string.h>
3 int main()
4 {
5 int i;
6 char str[20];
7 for (i=0; i<20; i++)
8 {
9 str[i] = 'a';
10 }
11 scanf("%s", str);
12 printf("字符串str长度:%d\n", strlen(str));
13 printf("打印字符串:%s\n", str);
14 for (i=0; i<20; i++)
15 {
16 printf("第%d个字符:%c\n", i+1, str[i]);
17 }
18 return 0;
19 }
如果输入:hello回车
--程序1输出------------
字符串str长度:5
打印字符串:hello
第1个字符:h
第2个字符:e
第3个字符:l
第4个字符:l
第5个字符:o
第6个字符:
第7个字符:a
第8个字符:a
第9个字符:a
第10个字符:a
第11个字符:a
第12个字符:a
第13个字符:a
第14个字符:a
第15个字符:a
第16个字符:a
第17个字符:a
第18个字符:a
第19个字符:a
第20个字符:a
--程序2输出---------
字符串str长度:5
打印字符串:hello
第1个字符:h
第2个字符:e
第3个字符:l
第4个字符:l
第5个字符:o
第6个字符:
第7个字符:a
第8个字符:a
第9个字符:a
第10个字符:a
第11个字符:a
第12个字符:a
第13个字符:a
第14个字符:a
第15个字符:a
第16个字符:a
第17个字符:a
第18个字符:a
第19个字符:a
第20个字符:a
如果输入:hello空格world回车
--程序1输出----------------
字符串str长度:11
打印字符串:hello world
第1个字符:h
第2个字符:e
第3个字符:l
第4个字符:l
第5个字符:o
第6个字符:
第7个字符:w
第8个字符:o
第9个字符:r
第10个字符:l
第11个字符:d
第12个字符:
第13个字符:a
第14个字符:a
第15个字符:a
第16个字符:a
第17个字符:a
第18个字符:a
第19个字符:a
第20个字符:a
--程序2输出--------------
字符串str长度:5
打印字符串:hello
第1个字符:h
第2个字符:e
第3个字符:l
第4个字符:l
第5个字符:o
第6个字符:
第7个字符:a
第8个字符:a
第9个字符:a
第10个字符:a
第11个字符:a
第12个字符:a
第13个字符:a
第14个字符:a
第15个字符:a
第16个字符:a
第17个字符:a
第18个字符:a
第19个字符:a
第20个字符:a
分析:对于scanf()会过滤空格,不接受空格后面的字符。但gets()会接受。2个函数在给变量赋值时都会将
字符串最后一位变为'\0'。例如上面输入 hello回车 后,第6个字符打印时不显示,其实是'\0'这个字
符,这个字符在屏幕上打印不出来。如果我们输入一串超过20个的字符串,程序运行时会显示错误。
那么如何能让scanf()能接受空格呢?可以在scanf()进行格式控制
相关文章推荐
- scanf( )和gets如何用C语言从键盘上输入并打印一串字符串的比较
- 在输入的字符串中判断是否有a,多种方法(比较前两种不同的表示方法)
- gets和scanf输入字符串的比较
- c语言获取用户输入字符串是scanf和gets的区别详解
- 【C语言天天练(十五)】字符串输入函数fgets、gets和scanf
- 两种方法让scanf遇到空格继续输入字符串
- c语言获取用户输入字符串是scanf和gets的区别
- 【C语言天天练(十五)】字符串输入函数fgets、gets和scanf
- C语言中scanf()与gets()在输入字符串的差别
- C语言中输入包含空格字符串的两种方法
- C语言的那些事——scanf()和gets()在字符串中出现空格时的区别比较
- c语言获取用户输入字符串是scanf和gets的区别
- c语言获取用户输入字符串是scanf和gets的区别
- c语言:把只含因子2、3和5的数称为丑数,求按从小到大的顺序的第1500个丑数(两种方法比较)
- c语言中输入带空格的字符串,最简单的方法。
- 编写函数,从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表),两种方法的比较。
- 比较两个字符串的大小(两种方法,重点在介绍数组元素可以作为函数的实参)
- Linux C 字符串输入函数 gets()、fgets()、scanf() 详解
- C语言——计算输入的任意数的位数(两种方法)
- C语言中scanf函数和gets函数在输入字符串时的区别