一个字符一个字符地输入
字符与字符之间用空格或回车间隔,全部输入完毕后用回车结束
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;
}