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)    收藏  举报

导航