C++关于字符的接收与输出操作示例
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; }
到此这篇关于C++关于字符的接收与输出操作示例的文章就介绍到这了,更多相关C++字符接收与输出内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
赞 (0)