亲宝软件园·资讯

展开

C++关于字符的接收与输出操作示例

—Miss. Z— 人气:0

C语言中,在使用scanf("%c",&data);读取一个字符时,有时会遇到scanf吞回车符的情况。 这里搜到几种常用的解决方法:

1.在scanf()中使用’\n’屏蔽回车符号。

scanf("\n%c",&c);

2.在scanf()格式串最前面添加空格,屏蔽回车字符

scanf(" %c",&c); //%c前面加空格,过滤回车

3.在接收字符前,使用getchar()来读取一次回车符号

getchar(); //专门用来读取上次输入的回车符号
scanf("%c",&c);

4.在接收字符前,使用fflush()清空输入流中缓冲区中的内容

fflush(stdin); //清空输入流缓冲区的字符,注意必须引入#include<stdlib.h>头文件
scanf("%c",&c);

C++中输出字符数组时的常见问题:

例1:

#include<iostream>
using namespace std;
int main() 
{
	char a[8];
	for (int i = 0; i < 8; i++)
		cin >> a[i];
	cout << a << endl;
	return 0;
}

运行结果:

分析:输出时出现汉字乱码 原因:字符数组里存放内容没有字符结束标志 ‘\0’

解决方法:

#include<iostream>
using namespace std;
int main() 
{
	char a[8];
	for (int i = 0; i < 8; i++)
		cin >> a[i];
	a[8] = '\0'; //最后留一个位置给'\0'
	cout << a << endl;
	return 0;
}

运行结果:

分析:在字符串的末尾手动加’\0’,此时循环遇到’\0’即结束,不会出现汉字乱码

例2:

#include<iostream>
using namespace std;
int main() 
{
	char words[] = { 'a', 'b', 'c', 'd', 'e' };
	cout << words << endl;
	return 0;
}

同例1情况,字符数组末尾没有’\0’作为结束,会出现汉字乱码

解决方法:手动在数组末尾加’\0’

#include<iostream>
using namespace std;
int main() 
{
	char words[] = { 'a', 'b', 'c', 'd', 'e','\0' };
	cout << words << endl;
	return 0;
}

以上两种方法都需要自己手动加’\0’,也可以使用另外两种系统自动加’\0’的方法

方法1:直接用cin输入字符数组,最后系统会自动加上\0空字符,且它占数组的一个char内存

#include<iostream>
using namespace std;
int main() 
{
	char a[9];
	cin >> a ;//最后会自动加上\0空字符,且它占数组的一个char内存
	cout << a  << endl;
	return 0;
}

方法2:运用get()函数或getline函数,同样最后系统会自动加上\0空字符,且它占数组的一个char内存

#include<iostream>
using namespace std;
int main()
{
	char ch[50];
	cin.getline(ch, 30);//可以换成cin.get(ch, 30)
	cout << ch << endl;
	return 0;
}

加载全部内容

相关教程
猜你喜欢
用户评论