1. scanf函数
scanf()可以接收多种格式的数据,遇到回车,tab,空格时,输入结束;
scanf()保留回车符号,当连续两次调用scanf时,会直接读入上一次结束scanf时的回车符号“\n” (0x0a); 没有将回车键屏蔽
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main(int argc, char** argv)
{
char buf[100];
scanf("%s", buf);
printf("first input:%s\n", buf);
char ret;
scanf("%c", &ret);
printf("second input:0x%x\n", ret);
return 0;
}
执行后:
test
first input:test
second input:0xa
再次scanf的时候,读取出来一个回车符('\n')(0x0a);
当输入字符串中带有空格时:
test space //输入带有空格的字符串
first input:test
second input:space
此时只提示输入一次,第二次执行scanf时候,直接读取空格之后的字符串;
2.gets()
函数原型:char *gets(char *string)
1.和scanf类似,但是遇到空格、Tab时,不会结束写入,仅当遇到回车时结束写入;
2.将回车键屏蔽,再次调用scanf函数时,不会读取到回车键
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main(int argc, char** argv)
{
char buf[100];
gets(buf);
printf("first input:%s\n", buf);
char test;
scanf("%c", &test);
printf("second input:0x%x\n", test);
return 0;
}
运行结果:
tttt //键入无空格字符串
first input:tttt
yyyyy
second input:0x79 //此时不是0x0a,表示再次读取到的字符不是回车符,
second input:y
键入带有空格的字符串运行结果:
tttt yyyy //键入有空格的字符串
first input:tttt yyyy //打印正常
uuuuuu
second input:0x75 //由于gets屏蔽了回车键,导致这里获取的不是"\n"
second input:u
3.getchar()
仅仅返回键入的第一个字符,不会屏蔽回车符;
键入字符大于1时,再次获取时,会继续读取剩余的字符;
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main(int argc, char** argv)
{
char test;
test = getchar();
printf("first input:%c\n", test);
test = getchar();
printf("second input:0x%x\n", test);
return 0;
}
键入一个字符,执行结果:
t //键入一个字符,再次getchar时,读入到的是回车符;
first input:t
second input:0xa
键入多个字符时,执行结果:
tyt
first input:t
second input:0x79 //键入多个字符时,再次getchar时,直接读入剩余的字符;
second input:y
以上是C语言中的输入函数;
----------------------------------------以下是C++键入函数-----------------------------------------------------------
1. cin
功能:
- 和scanf一样,遇到空格,Tab,回车都结束;
- 再次调用cin时,会直接读取剩余的字符;
- 会屏蔽掉回车键;
#include <iostream> #include <string.h> #include <stdio.h> #include <stdlib.h> using namespace std; int main(int argc, char** argv) { char buf[100]; cin >> buf; printf("first input:%s\n", buf); char test; cin >> test; printf("second input:%c\n", test); printf("second input:0x%x\n", test); return 0; }
键入不带空格,Tab的字符,执行结果:
tttttt //键入不带空格的字符串 first input:tttttt
rrrrr second input:r //第二次cin时,没有读取到回车建,说明cin屏蔽掉了回车; second input:0x72
键入带空格的字符串,执行结果:
tttt yy first input:tttt //遇到空格截止 second input:y //再次执行cin时,直接读取剩余的字符; second input:0x79
2.cin.get()
功能:
- 遇到空格,Tab时,不会结束,可以接收整行的字符串;
- 不会屏蔽掉回车;
用法:
- 用法一:cin.get(字符变量名);
- 用法二:cin.get(字符数组名,接收字符数目)用来接收一行字符串,可以接收空格
- 用法三:cin.get() 主要是用于舍弃输入流中的不需要的字符,或者舍弃回车,弥补cin.get(字符数组名,接收字符数目)的不足.
#include <iostream> #include <string.h> #include <stdio.h> #include <stdlib.h> using namespace std; int main(int argc, char** argv) { char buf[100]; cin.get(buf, sizeof(buf)); printf("first input:%s\n", buf); char test; cin.get(test); printf("second input:%c\n", test); printf("second input:0x%x\n", test); return 0; }
键入不带空格的字符串:
ppppp //不带空格的字符串 first input:ppppp second input: //第二次cin.get时,直接读取到了一个回车字符;表示并没有屏蔽掉回车符; second input:0xa
键入带空格的字符串:
tttt uuuuu first input:tttt uuuuu //空格也会被正常接收 second input: //未屏蔽回车; second input:0xa
3. cin.getline()
功能:
- 可以接收空格、Tab;
- 屏蔽回车;
- 可设置结束字符;
用法:
- cin.getline(char * , size)
- cin.getline(char * , size, ‘指定结束符')
#include <iostream> #include <string.h> #include <stdio.h> #include <stdlib.h> using namespace std; int main(int argc, char** argv) { char buf[100]; cin.getline(buf, sizeof(buf)); printf("first input:%s\n", buf); char test; cin.get(test); printf("second input:%c\n", test); printf("second input:0x%x\n", test); return 0; }
输入不代空格的字符串,执行结果:
tttt first input:tttt dsadfa second input:d //此处获取的不是回车符,表示getline屏蔽了回车; second input:0x64
输入带有空格的字符串,执行结果:
tttt yyyy //说明getline接受空格; first input:tttt yyyy ooo second input:o //getline屏蔽了回车; second input:0x6f
4. getline 需要包括头文件(#include <string>)
功能:
- 和cin.getline一样;
- 屏蔽回车;
- 接收空格;
用法:getline(cin, string);
#include <iostream> #include <string.h> #include <stdio.h> #include <stdlib.h> using namespace std; int main(int argc, char** argv) { string buf; getline(cin, buf); printf("first input:%s\n", buf.c_str()); char test; cin.get(test); printf("second input:%c\n", test); printf("second input:0x%x\n", test); return 0; }
执行结果:
ttt y yyy //接受空格,屏蔽回车 first input:ttt y yyy dadfa second input:d second input:0x64
总结:
1.scanf()遇到空格、Tab结束、不会屏蔽回车;
2.gets()遇到空格、Tab不会结束、屏蔽回车;
3.getChar()获取一个字符,不会屏蔽回车;
4.cin()遇到空格、Tab结束、屏蔽回车;
5.cin.get()遇到空格、Tab不结束,不会屏蔽回车;
6.cin.getline()遇到空格、Tab不结束,屏蔽回车;
7.getline()遇到空格、Tab不结束,屏蔽回
© 著作权归作者所有
相关热门文章
发表评论