一个字符一个字符地输入

字符与字符之间用空格或回车间隔,全部输入完毕后用回车结束

getchar()方法是用来读取字符与字符之间的空格或者回车的,

b[ i+1 ] = '\0' ; 用'\0'来结束字符串:如果去掉此块代码,b[2]之后会出现乱码

解决办法:用 “” 空串来初始化数组 char s[50] = "";

getchar():

首先,getchar()是stdio.h中的库函数,它的作用是从stdio流中读入一个字符;键盘输入字符是先存入缓冲区,当你按下回车时,getchar就会进入缓冲区读取字符,一次只读取第一个字符,我们输入的一串字符被读出来是getchar循环读取的结果,而回车键取代了我们输入的第一个字符,我们输入getchar()来清除回车键,达到从第一个字符开始读起的目的。

#include<stdio.h>
#include<string.h>
// 输入三个字符:每输入一个字符就要用空格或回车间隔,结束时输入回车
int main(){
    char b[4];
    for(int i = 0;i < 3;i++)
    {
        scanf("%c",&b[i]);
        getchar(); //吸收缓存区中的空格或回车
        if(i+1 == 3) 
            b[i+1] = '\0';   // 字符数组的结束符号
    }
    printf("%s\n",b);
}

2. 直接输入一个字符串并存储

用“%s”读入,程序会自动在结束时加 结束符 '\0

#include <stdio.h>
 
int main()
{
    char s[50];    
    scanf("%s",s);
    printf("%s\n",s);
    return 0;
}

3. 直接输入一个字符串,程序在缓冲区中读取一个字符

如果次字符不是回车'\n',则存入字符数组,如果是回车则结束循环

这里已经初始化了数组,所以不进行 '\0' 结束符赋值也不会有乱码

这个方法虽然麻烦,但是可以在存储字符串时实现一些功能,比如判断字符是否为小写,如果不是则转换为小写

#include<stdio.h>
// 输入一串字符,再从缓冲区挨个读取
int main(){
    int i = 0;
    char c;
    char s[50] = ""; // 如果不初始化s[],系统会自动赋值 
    scanf("%c",&c);
    while(c != '\n'){
        s[i] = c;
        i++;
//        printf("%c\n",s[i]);
        scanf("%c",&c);
    }
    printf("%s\n",s);
    return 0;
}

cin

cin读取时,遇到空格、制表符、回车会立即终止输入

#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    string s;
    cin >> s;
    cout << s << endl;
    return 0;
}

如果想使用cin输入多个字符,可以使用while循环

#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    string s;
    while(cin>>s)
        cout << s << endl;
    return 0;
}

2. getline()

getline()读取一行字符串,通过回车键来确定输入的结尾

#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    string s;
    getline(cin,s);
    cout << s << endl;
    return 0;
}

3. 读取一个字符

不管输入几个字符,每次只读取一个

#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    char ch;
    ch=cin.get();
    cout << ch << endl;
    char sh;
    cin.get(sh);
    cout<<sh<<endl;
    return 0;
}

读取多个字符,可读取空格,最后会自动保存一个’\0’

#include <iostream>
using namespace std;
 
int main()
{
    char ch[5];
    cin.get(ch,5);
    cout << ch << endl;
    return 0;
}

4、cin.getline()

接收一串字符,可以读取空格,最后默认添加’\0’

#include <iostream>
using namespace std;
 
int main()
{
    char ch[5];
    cin.getline(ch,5);
    cout << ch << endl;
    return 0;
}