菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
122
0

C/C++之键盘输入函数(scanf、gets、getchar、cin、cin.get()、cin.getline()、getline())

原创
05/13 14:22
阅读数 87017

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不结束,屏蔽回

发表评论

0/200
122 点赞
0 评论
收藏