C++中cin>> cin.get(char[], int) cin.getline(char[], int) cin.get(char)输入区别

一直以来对C++的字符串输入部分都模棱两可,这次对这三种输入方式总结了一下,如有错误之处,还请大家指正。

1. 结束标记
1)cin使用空白(空格、制表符和换行符)来确定字符串的结束位置
2)cin.get(char[], int)使用换行符来确定字符串的结束位置
3)cin.getline(char[], int)使用换行符来确定字符串的结束位置
2. 结束符的保留情况
1)cin将结束的标记保留在输入队列中
2)cin.get(char[], int)将结束的标记保留在输入队列中
3)cin.getline(char[], int)将结束的标记从队列中删除

【注意】

1. cin >> 会过滤掉不可见字符如空格、制表符和换行符等

2. cin.get(char ch)可以读取任何字符包括空格、制表符和换行符,并把该字符赋值给ch

3. cin.get()用来读取一个字符,该字符可以是包括空格、制表符和换行符的任何字符

3. cin.get()使用举例说明

源代码如下所示:

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
    const int size = 50;
    char firstCity[size];
    char secondCity[size];

    cout << "Please Input First City!\n";
    cin.get(firstCity, size);
    printf("Please Input Second City!\n");
    cin.get(secondCity, size);
    printf("Your Input Result Is First City: %s Second City: %s", firstCity, secondCity);
}

运行结果如下图所示,从中可以看出,输入第一个字符串并按回车之后没有机会输入第二个字符串,原因是输入第一个字符串后cin.get(char[], int)仍然保留了换行符在输入队列中,此时程序第二次要求输入的时候,检查到输入队列中下一个字符就是换行符,就认为已经输入过了,因此结束了程序。

C++中cin>> cin.get(char[], int) cin.getline(char[], int) cin.get(char)输入区别_第1张图片

解决方案:cin.get()函数不带任何参数可以读取下一个字符(即使是换行符),修改后程序源代码如下:

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
    const int size = 50;
    char firstCity[size];
    char secondCity[size];

    cout << "Please Input First City!\n";
    cin.get(firstCity, size).get();
    printf("Please Input Second City!\n");
    cin.get(secondCity, size);
    printf("Your Input Result Is First City: %s Second City: %s", firstCity, secondCity);
}

程序运行结果如下:

C++中cin>> cin.get(char[], int) cin.getline(char[], int) cin.get(char)输入区别_第2张图片

4. cin.getline()使用举例说明

程序源代码如下:

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
    const int size = 50;
    char firstCity[size];
    char secondCity[size];

    cout << "Please Input First City!\n";
    cin.getline(firstCity, size);
    printf("Please Input Second City!\n");
    cin.getline(secondCity, size);
    printf("Your Input Result Is First City: %s Second City: %s", firstCity, secondCity);
}

运行结果如下,由于cin.getline(char[], int)执行后会删除输入队列中的换行符,因此可以直接输入下一行,不需要额外处理。

C++中cin>> cin.get(char[], int) cin.getline(char[], int) cin.get(char)输入区别_第3张图片

5. cin使用举例说明

程序源代码如下:

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
    const int size = 50;
    char firstCity[size];
    char secondCity[size];

    cout << "Please Input First City!\n";
    cin >> firstCity;
    printf("Please Input Second City!\n");
    cin >> secondCity;
    printf("Your Input Result Is First City: %s Second City: %s", firstCity, secondCity);
}
程序运行结果如下,这时你会疑问,cin不是会保留结束符么,为什么还是可以继续输入第二个字符串?这是因为 >> 会过滤掉不可见字符如空格、制表符和换行符等

C++中cin>> cin.get(char[], int) cin.getline(char[], int) cin.get(char)输入区别_第4张图片

可以再看个例子,就可以说明cin的确会保留结束符在输入队列中,同时证明>> 会过滤掉不可见字符如空格、制表符和换行符

程序源代码如下:

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
    const int size = 50;
    char firstCity[size];
    char secondCity[size];

    cout << "Please Input First City!\n";
    cin >> firstCity;
    printf("Please Input Second City!\n");
    cin.getline(secondCity, size);
    printf("Your Input Result Is First City: %s Second City: %s", firstCity, secondCity);
}
运行结果如下所示,此结果说明cin的确会保留结束符在输入队列中,程序第二次输入的时候由于检查到了输入队列中的换行符,认为已经输入过。

C++中cin>> cin.get(char[], int) cin.getline(char[], int) cin.get(char)输入区别_第5张图片

你可能感兴趣的:(cin,cin.getline,cin.get,C++输入)