C++关于字符的接收与输出操作示例
—Miss. Z— 人气:0C语言中,在使用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; }
加载全部内容