• C++输入输出总结


    20220813

    总结:

    输入一个字符:

    char ch;
    cin >> ch;		//读取下一个输入的字符,但是会忽略空格和回车符
    ch = cin.get();	//读取下一个输入的字符,不会忽略空格和回车符
    cin.get(ch);	//读取下一个输入的字符,不会忽略空格和回车符
    cout << "ch = " << ch << "_" << endl;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    输入一个单词:

    (如果刚开始输入空格或者回车符是被当做没有输入内容,只有输入一个单词后再遇到空格和回车就结束

    char name[30]; 
    cin >> name;//遇到空格和回车就结束
    cout << name << "_" << endl;
    
    string str;
    cin >> str;//遇到空格和回车就结束
    cout << str << "_" << endl;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    输入一个数字:

    int num;//double num;
    cin >> num;
    //num = cin.get();//读取输入的下一个字符(包括空格符和回车符),赋给ch  char-->int  
    //空格是32,回车是10, 输入2结果是50, 输入22结果也是50
    //cin.get(num);//报错,(这种方式只能用于char类型的字符)
    cout << num << endl;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    输入一行字符串:

    遇到空格不结束,遇到回车才结束!!!

    char name[30]; 
    cin.getline(name, 30);//遇到空格不结束,遇到回车才结束
    cout << name << "_" << endl;
        
    string str;
    getline(cin, str);//遇到空格不结束,遇到回车才结束
    cout << str << "_" << endl;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    循环输入很多个字符:

    1.'#'作为结束符:(回车、空格不统计在内)
    	char ch;
    	vector<char> vec;
    	cin >> ch;//会忽略空格和回车
    	while(ch != '#'){
    		//ch不等于结束符,再存入到vector中
    		vec.push_back(ch);
    		cin >> ch;//会忽略空格和回车
    	}
    	for(auto it : vec) cout << it << "; ";
    	cout << endl;
    
    2.'#'作为结束符:(回车、空格也要统计在内)
        char ch;
        vector<char> vec;
        //cin >> ch;//会忽略空格和回车
        ch = cin.get();//不会忽略空格和回车
        while(ch != '#'){
            //ch不等于结束符,再存入到vector中
            vec.push_back(ch);
            //cin >> ch;//会忽略空格和回车
            ch = cin.get();//不会忽略空格和回车
        }
        for(auto it : vec) cout << it << "; ";
        cout << endl;
        
    3.'\n'作为结束符:(空格也会被统计在内)
    	char ch;
    	vector<char> vec;
    	ch = cin.get();//不会忽略空格和回车
    	while(ch != '\n'){
    		//ch不等于结束符,再存入到vector中
    		vec.push_back(ch);
    		ch = cin.get();//不会忽略空格和回车
    	}
    	for(auto it : vec) cout << it << "; ";
    	cout << endl;
    
    4.'\n'作为结束符:(空格不统计在内)
    这个涉及到遇到连续空格的情况...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    循环输入很多个单词:(以空格作为间隔符,以’\n’作为结束符)

        char name[30]; 
        char ch;
        do{
            cin >> name;//遇到空格、回车符就算结束
            cout << name << "_\n";
            ch = cin.get();//下一个字符是否为回车符
        }while(ch != '\n');
    
        string str;
        char ch;
        vector<string> vec;
        do{    
            cin >> str;//遇到空格、回车符就算结束
            ch = cin.get();//下一个字符是否为回车符
            vec.push_back(str);
        }while(ch != '\n');
        for(auto it : vec) cout << it << "; ";
        cout << endl;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    循环输入很多个数字:(以空格作为间隔符,以’\n’作为结束符)

        int num;//double num;
        char ch;
        vector<int> vec;
        do{
            cin >> num;
            ch = cin.get();//下一个字符是否为回车符
            vec.push_back(num);
        }while(ch != '\n');
        for(auto it : vec) cout << it << "; ";
        cout << endl;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    循环输入很多行字符串:(回车符作为单行结束的标志,空行作为输入结束的标志)

    上来就输入空行的话就直接返回:(推荐)
    	string str;
    	vector<string> vec;
    	getline(cin, str);//先输入一行
    	while(str != ""){//判断是否为空行
    		vec.push_back(str);
    		getline(cin, str);
    	}
    	for(auto it : vec) cout << it << "_" << endl;
    
    上来就输入空行的话会把空行也打印出来:
        string str;
        vector<string> vec;
        //getline(cin, str);
        do{
            getline(cin, str);
            vec.push_back(str);
        }while(str != "");
        for(auto it : vec) cout << it << "_" << endl;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    输入一行字符串,以空格作为间隔符,把字符串分割成多个部分

    #include 
    #include 
    #include 
    
    using namespace std;
    //索引实现
    vector<string> split(const string &str)
    {
        vector<string> ret;
        int start = 0, end = 0;
    
        while (end < str.size())
        {
        	//非空字符一直走
            while (end < str.size() && str[end] != ' ')//空格作为分隔符
                end++;
                
            //截取
            if (start < end)
            {
                ret.push_back(str.substr(start, end - start));
                start = end;
            }
            
            //跳过连续空格
            while (end < str.size() && str[end] == ' ')//空格作为分隔符
            {
                end++;
                start = end;
            }
        }
        return ret;
    } 
    
    int main(){
    
        string str;
        getline(cin, str);//输入一行字符串
        //cout << "解析前:" << str << endl;
        vector<string> vec;
        vec = split(str);//以空格作为间隔符,把字符串分割成多个部分
        //cout << "解析后:";
        for(auto it : vec) cout << it << "; ";//\n
        cout << endl;
        
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    循环输入很多个字符串,以空格作为间隔符,把每个字符串分割成多个部分

    int main(){
    
    	string str;
    	vector<string> vec;
        cout << "请输入一行字符串:(回车符作为单行结束的标志,空行作为输入结束的标志)";
    	getline(cin, str);//先输入一行
    	while(str != ""){//判断是否为空行
    		vec.push_back(str);
            cout << "解析前:" << str << endl;
            //每输入一行,就解析一行:
            vector<string> tmp;
            tmp = split(str);//以空格作为间隔符,把字符串分割成多个部分
            cout << "解析后:";
            for(auto it : tmp) cout << it << "; ";//\n
            cout << endl;
    
            cout << "请输入一行字符串:(回车符作为单行结束的标志,空行作为输入结束的标志)";
    		getline(cin, str);
    	}
        cout << "输入结束!" << endl;
        
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    输入很多个字符串,按照固定的格式解析每行字符串(用多种间隔符把字符串分割成多个部分)

    1.一堆字符串放在指针数组中:(用C++实现)
    (下面的2.2 示例2(其他字符作为间隔符)中 还有个C语言版本)

    #include
    #include
    using namespace std;
    int main(){
        int w,h,f;
        const char *modeList[8] = {
            "1920x1080p60.00-0",
            "1920x1080i60.00-2",
            "1920x1080p50.00-4",
            "1920x1080i50.00-5",
            "1280x720p60.00-14",
            "1280x720i50.00-16",
            "720x576p50.00-21",
            "720x480p59.94-23"
        };
        //遍历指针数组:数组的元素个数 = 数组大小 / 单个元素的大小  (指针数组中的元素都是指针,所以是char*)
        for(int i = 0; i < sizeof(modeList) / sizeof(char*); i++){
            //输出当前行:
            cout << "解析前:" << modeList[i] << endl;
            //解析当前行:
            string str = modeList[i];
            vector<string> vec(3);
            int j = 0;
            while(j < str.size()){//j++
                while(str[j] != 'x') {vec[0].push_back(str[j]); j++;} j++;//跳过'x'
                while(str[j] != 'p' && str[j] != 'i') {vec[1].push_back(str[j]); j++;} j++;//跳过'p'或者'i'
                while(str[j] != '-') {vec[2].push_back(str[j]); j++;} break;//遇到'-'就解析结束,退出for循环
            }
            //输出解析后的内容:
            cout << "解析后:" << vec[0] << ", " << vec[1] << ", " << vec[2] << endl; 
        }
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    2.一对字符串放在vector中:

    #include
    #include
    #include
    using namespace std;
    int main(){
        int w,h,f;
    
        vector<string> vec = {
            "1920x1080p60.00-0",
            "1920x1080i60.00-2",
            "1920x1080p50.00-4",
            "1920x1080i50.00-5",
            "1280x720p60.00-14",
            "1280x720i50.00-16",
            "720x576p50.00-21",
            "720x480p59.94-23"
        };
    
        for(int i = 0; i < vec.size(); i++){
            //输出当前行:
            cout << "解析前:" << vec[i] << endl;
            //解析当前行:
            string str = vec[i];
            vector<string> tmp(3);
            int j = 0;
            while(j < str.size()){//j++
                while(str[j] != 'x') {tmp[0].push_back(str[j]); j++;} j++;//跳过'x'
                while(str[j] != 'p' && str[j] != 'i') {tmp[1].push_back(str[j]); j++;} j++;//跳过'p'或者'i'
                while(str[j] != '-') {tmp[2].push_back(str[j]); j++;} break;//遇到'-'就解析结束,退出for循环
            }
            //输出解析后的内容:
            cout << "解析后:" << tmp[0] << ", " << tmp[1] << ", " << tmp[2] << endl; 
        }
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    (总结的内容到此结束)

    一、

    1.1 输入一个单词、一个数字、一行字符串

    如果是用char数组,

    char name[20];
    int num;
    
    //读一个单词:
    cin >> name;
    cin.get();//消除结束符
    
    //读一个数字: 
    cin >> num;
    cin.get();//消除结束符
    
    //读一整行
    cin.getline(name, 20);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    如果是用string对象,

    string str;
    int num;
    
    //读一个单词:
    cin >> str;
    cin.get();//消除结束符
    
    //读一个数字: 
    cin >> num;
    cin.get();//消除结束符
    
    //读一整行
    getline(cin, str);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    1.2 读取单个字符char ch;

    char ch;
    cin >> ch;		//方式1(会忽略空格符和回车符)
    ch = cin.get();	//方式2(不会忽略空格符和回车符)读取输入的下一个字符(包括空格符和回车符),赋给ch
    cin.get(ch);	//方式2'(这种方式只能用于char类型的字符)
    
    • 1
    • 2
    • 3
    • 4

    循环读一个字符、一个数字:

    方式1char ch;
    int count = 0;
    //cin >> ch;//5.5.1 会忽略空格和换行符
    //cin.get(ch);//5.5.2 读取输入的下一个字符(包括空格符和回车符)
    ch = cin.get();
    while (ch != '#') {//#作为结束符
    	cout << ch;//把输入的内容进行输出
    	count++;
    	//cin >> ch;//5.5.1 会忽略空格和换行符
    	//cin.get(ch);//5.5.2 读取输入的下一个字符(包括空格符和回车符)
        ch = cin.get();
    }
    cout << "共输入了 " << count << " 个字符。" << endl;
    
    方式2int num;		vector<int> vec;
    double num;		vector<double> vec;
    char num;		vector<char> vec;
    while(1){
    	if(!(cin >> num)) break;	//(会忽略空格符和回车符)
    	//if(!(cin.get(num))) break; // 报错,这种方式只能用于char类型的字符
    	vec.push_back(num);
    }
    
    for(auto it : vec) cout << it << ", ";
    cout << endl;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    二、C++实现split(输入一个string,以空格为分隔符,将分割后的内容放到vector中)

    #include 
    #include 
    #include 
    
    using namespace std;
    //索引实现
    vector<string> split(const string &str)
    {
        vector<string> ret;
        int start = 0, end = 0;
    
        while (end < str.size())
        {
        	//非空字符一直走
            while (end < str.size() && str[end] != ' ')//空格作为分隔符
                end++;
                
            //截取
            if (start < end)
            {
                ret.push_back(str.substr(start, end - start));
                start = end;
            }
            
            //跳过连续空格
            while (end < str.size() && str[end] == ' ')//空格作为分隔符
            {
                end++;
                start = end;
            }
        }
        return ret;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    2.1 示例1(空格作为分隔符)

    题目:
    在这里插入图片描述
    代码:

    #include 
    #include 
    #include 
    
    using namespace std;
    //索引实现
    vector<string> split(const string &str)
    {
        vector<string> ret;
        int start = 0, end = 0;
    
        while (end < str.size())
        {//非空字符一直走
            while (end < str.size() && str[end] != ' ')
                end++;
            //截取
            if (start < end)
            {
                ret.push_back(str.substr(start, end - start));
                start = end;
            }
            //跳过连续空格
            while (end < str.size() && str[end] == ' ')
            {
                end++;
                start = end;
            }
        }
        return ret;
    }
    int main(){
    
        string str;
        //getline(cin, str);//手动输入
        str = "55 45  05 06 07 08 09 0A C7";
        vector<string> vec = split(str);
        //输出分割后的各个部分
        for(auto it : vec) cout << it << "; ";
        cout << endl;
        cout << "协议头:" << vec[0] << endl;
        cout << "地址:" << vec[1] << endl;
        cout << "数据长度:" << vec[2] << endl;
        int num = stoi(vec[2]); 
        cout << "有效数据:";
        for(int i = 0; i < num; i++) cout << vec[3 + i] << ", ";
        cout << endl;
        cout << "校验和:" << vec[3 + num] << endl;
    
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    编译运行:

    55; 45; 05; 06; 07; 08; 09; 0A; C7; 
    协议头:55
    地址:45
    数据长度:05
    有效数据:06, 07, 08, 09, 0A, 
    校验和:C7
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.2 示例2(其他字符作为间隔符)

    核心代码是这部分:

    		//解析当前行:
            string str = modeList[i];//当前行
            vector<string> vec(3);//三种分隔符,或者说是吧字符串分成三部分
            int j = 0;
            while(j < str.size()){//j++
                
                while(str[j] != 'x') {vec[0].push_back(str[j]); j++;} 
                j++;//跳过'x'
                
                while(str[j] != 'p' && str[j] != 'i') {vec[1].push_back(str[j]); j++;} 
                j++;//跳过'p'或者'i'
                
                while(str[j] != '-') {vec[2].push_back(str[j]); j++;} 
                break;//遇到'-'就解析结束,退出for循环
            }
            //输出解析后的内容:
            cout << vec[0] << ", " << vec[1] << ", " << vec[2] << endl; 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    解析指针数组中的字符串常量,把字符串中的内容按不同的分隔符分开

    题目:
    在这里插入图片描述
    在这里插入图片描述

    代码:(C++)

    #include
    #include
    using namespace std;
    int main(){
        int w,h,f;
        const char *modeList[8] = {
            "1920x1080p60.00-0",
            "1920x1080i60.00-2",
            "1920x1080p50.00-4",
            "1920x1080i50.00-5",
            "1280x720p60.00-14",
            "1280x720i50.00-16",
            "720x576p50.00-21",
            "720x480p59.94-23"
        };
        //遍历指针数组:数组的元素个数 = 数组大小 / 单个元素的大小  (指针数组中的元素都是指针,所以是char*)
        for(int i = 0; i < sizeof(modeList) / sizeof(char*); i++){
            //输出当前行:
            cout << modeList[i] << endl;
            //解析当前行:
            string str = modeList[i];
            vector<string> vec(3);
            int j = 0;
            while(j < str.size()){//j++
                while(str[j] != 'x') {vec[0].push_back(str[j]); j++;} j++;//跳过'x'
                while(str[j] != 'p' && str[j] != 'i') {vec[1].push_back(str[j]); j++;} j++;//跳过'p'或者'i'
                while(str[j] != '-') {vec[2].push_back(str[j]); j++;} break;//遇到'-'就解析结束,退出for循环
            }
            //输出解析后的内容:
            cout << vec[0] << ", " << vec[1] << ", " << vec[2] << endl; 
        }
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    代码:(C语言)

    #include
    #include
    #include
    int main(){
    
        
        const char *modeList[8] = {
            "1920x1080p60.00-0",
            "1920x1080i60.00-2",
            "1920x1080p50.00-4",
            "1920x1080i50.00-5",
            "1280x720p60.00-14",
            "1280x720i50.00-16",
            "720x576p50.00-21",
            "720x480p59.94-23"
        };
        //遍历指针数组:数组的元素个数 = 数组大小 / 单个元素的大小  (指针数组中的元素都是指针,所以是char*)
        for(int i = 0; i < sizeof(modeList) / sizeof(char*); i++){
            //输出当前行:
            printf("%s\n", modeList[i]);
            //解析当前行:
            char str[100]; 
            strcpy(str, modeList[i]);
            //printf("---%s, len = %ld\n", str, strlen(str));
            //int w,h,f; w = h = f = 0;
            char wChar[20];
            char hChar[20];
            char fChar[20];
            int j = 0;
            while(j < strlen(str)){//j++
                int k = 0; 
                while(str[j] != 'x') {wChar[k++] = str[j++]; } wChar[k] = '\0';  j++;//跳过'x'              
                k = 0; 
                while(str[j] != 'p' && str[j] != 'i') {hChar[k++] = str[j++];} hChar[k] = '\0'; j++;//跳过'p'或者'i'            
                k = 0; 
                while(str[j] != '-') {fChar[k++] = str[j++];} fChar[k] = '\0'; break;//遇到'-'就解析结束,退出for循环
            }
            //printf("len = %ld, %ld, %ld; ", strlen(wChar), strlen(hChar), strlen(fChar));
            strncpy(wChar, wChar, strlen(wChar));
            strncpy(hChar, hChar, strlen(hChar));
            strncpy(fChar, fChar, strlen(fChar));
            //输出解析后的内容:
            //w = atoi(wChar); h = atoi(hChar); f = atoi(fChar);
            //printf("%d, %d, %d\n", w, h, f);
            printf("%s, %s, %s\n", wChar, hChar, fChar);
        }
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    三、循环和文本输入

    来自C++ Primer Plus - 第四章中的4.13 编程练习 第1题
    C++ Primer Plus - 第五、六章中的5.5 循环和文本输入5.8 复习题 第9题 区分cin >> ch; 和 cin.get(ch); 和 ch = cin.get(); ☆☆☆

    3.1 读取一个单词或数字 读取一整行

    总结:

    1. 如果读取一个单词char name[20]; string str;或一个数字int num; 或一整行string name; char name[20]; —就看①
    2. 如果读取单个字符char ch; —就看③和②

    具体内容:
    ①(看一下第四章-编程练习-第1题下面的综述)

    实现方式读取一个单词或数字读入一整行
    字符数组char ch[20]; cin >> ch; cin.get();//消除结束符
    int num; cin >> num; cin.get();//消除结束符
    char name[20];
    cin.getline(name,20);
    string对象string str; cin >> str; cin.get();//消除结束符
    int num; cin >> num; cin.get();//消除结束符
    string name;
    getline(cin,name);

    ②函数cin.get()重载:(1和2适合读单个字符,3适合读一整行字符串)

    1. char ch; ch = cin.get();//没有参数,返回值为输入中的下一个字符
    2. char ch; cin.get(ch);//一个参数char类型,参数是引用类型,直接将读到的字符赋给参数ch
    3. char name[20]; cin.get(name,20);//两个参数:字符数组名,一次接收的字符数上限(③见第四章的 4.13 编程练习 的 第1题 )

    ③如果要读取单个字符char ch;通常使用3种方式
    (推荐用后两种方式,也就是上面②的1和2),

    char ch;①cin >> ch;
    cin.get();//消除结束符
    ②cin.get(ch);
    cin.get();//消除结束符
    ③ch = cin.get();
    cin.get();//消除结束符
    特点不会读入空白字符(空格符、换行符、制表符),所以不推荐将会读取所有ASCII字符并将其保存在ch变量中,具体见上面②的1将会读取所有ASCII字符并将其保存在ch变量中,具体见上面②的2

    如何判断输入的数据是不是数字?

    测试 char、int、double类型 在什么情况下会输入失败

    3.2 逐个字符输入(空格和回车符也要算进去)

        //5.5.1 5.5.2
    	char ch;
    	int count = 0;
    	//cin >> ch;//5.5.1 会忽略空格和换行符
    	//cin.get(ch);//5.5.2 读取输入的下一个字符(包括空格符和回车符)
    	ch = cin.get();
        while (ch != '#') {//#作为结束符
    		cout << ch;//把输入的内容进行输出
    		count++;
    		//cin >> ch;//5.5.1
    		//cin.get(ch);//5.5.2
            ch = cin.get();
        }
    	cout << "共输入了 " << count << " 个字符。" << endl;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    3.3 逐个字符读取,判断是否到达文件尾?

        //程序2:
    	char ch;
    	int count = 0;
    	while (cin.get(ch)) {//判断是否到达文件尾 
    		
    		cout << ch;
    		count++;
    	}
    	cout << "共输入了 " << count << " 个字符。" << endl;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    桥接模式(Bridge Pattern)
    Hive 之中位数
    第 4 章 串(串的块链存储实现)
    电脑视频转换成mp4格式,视频格式转换器转换
    Visio文件编辑查看工具Visio Viewer for Mac
    Oracle IO是否为Direct IO
    App加固中的代码混淆功能,让逆向工程师很头疼
    react-demo项目:自定义实现一个弹框Dialog组件
    代码复现: VoxelNet论文和代码解析 pytorch版本(二) Dataloader.py
    JAVA计算机毕业设计电子商城系统Mybatis+源码+数据库+lw文档+系统+调试部署
  • 原文地址:https://blog.csdn.net/weixin_38665351/article/details/126286321