C\C++控制台输入输出常见错误
C++控制台输入输出需包含头文件 <iostream>
#include <iostream>
控制台打印信息函数:
int a = 10; std::cout << a << endl;
控制台输入函数:
int a; std::cout << “请输入a的值:” << endl; std::cin >> a;
控制台读取一行(带空格符)函数:
std::string str; getline(cin, str);//从输入缓冲区读取一行数据,遇到回车符结束。循环读取时如果遇到EOF(ctrl+z)文件结束符加回车符( ‘\n’ ),表示文本内容全部读取完成。形参中的cin为标准输入设备。
控制台输入函数是从输入缓冲区读取数据,存在变量类型与输入信息不匹配等问题。比如:
#include <iostream>
#include <windows.h>
using namespace std;
int main(void) {
int a;
cout << "请输入a的值:" << endl;
cin >> a;
cout << "a的值为:" << a << endl;
system("pause");
return 0;
}
//-------------------用户输入数据----------------------
请输入a的值: name
a的值为:0
请按任意键继续...
//"name"为字符串类型,与a的变量类型不匹配,因此变量a未从输入缓冲区取到对应的值,打印的值为声明变量时的默认值0。
解决方案:
1.检查输入的数据类型是否是正确。
2.如果输入的数据类型不匹配,先清除cin的错误标志,然后清空输入缓冲区。
3.继续让用户输入正确的数据类型。
if (cin.fail()) { cout << "输入失败,请输入一个整数" << endl; cin.clear();//清除cin的错误标志 cin.sync();//清空输入缓冲区 }
在VS中上面的方法cin.sync()是无法调用的,因此如果在VS中开发,我们可以自己实现一个清空输入缓冲区的函数,具体实现如下:
#include <iostream> #include <windows.h> using namespace std; void ClearBuff(){ char temp; while ((temp = getchar()) != '\n'); //循环读取残留在输入缓冲区中的字符,判断是否为'\n',由于输入数据都是以回车符为结束标准,因此残留数据的最后一个字符一定是回车符,全部读取出来后,输入缓冲区就清空完毕了。 } int main(void){ int a; cout << "请输入a的值:" << endl; cin >> a; if (cin.fail()) { cout << "输入失败,请输入一个整数类型的值" << endl; cin.clear();//清楚cin的错误标志,错误标志只能手动清楚 ClearBuff(); } system("pause"); return 0; }
=====================================================================================================================================
语言控制台输出函数:
#include <stdio.h> int main(void){ char a[] = "Meeos"; printf("a字符串的值是:%s", a); return 0; }
输入函数:
#include <stdio.h> int main(void){ char a[32]; printf("请输入字符串a的值:\n"); scanf("%s", a);//接收输入缓冲区类型为字符串的数据 printf("字符串a的值为:%s", a); return 0; }
C语言中输入时读取一行信息:
#include <stdio.h> int main(void){ char a[64]; printf("请输入字符串a的值:"); gets(a);//接收输入缓冲区中的字符串类型数据,遇到\n回车符则结束 return 0; }
在C语言中,如果连续接收用户输入信息,缓冲区中会留存第一次接收数据结束时的回车符\n数据,从而导致第二次接收一行数据时出现无法读取的情况,解决办法是清理缓冲区:
#include <stdio.h> int main(void){ char name[32]; char addr[64]; printf("请输入用户名字:\n"); scanf("%s", name); /*控制台输入信息:meeos回车后此时scanf函数读取输入缓冲区中的数据meeos,遇到回车符结束,但回车符任留在了输入缓冲区中,导致后续读取无法正常进行。*/ fflush(stdin);//fflush函数用以清空输入缓冲区,stdin为标准输入设备,这里指的是键盘的输入信息 printf("请继续输入用户地址:\n"); gets(addr); printf("用户的姓名为:%s \n 用户的地址为:%s \n", name ,addr);
return 0; }
posted on 2022-09-19 15:00 xueshaoshan 阅读(465) 评论(0) 收藏 举报
浙公网安备 33010602011771号