首页 > 解决方案 > 没有参数的 cin.get() 做什么?

问题描述

cin.get()没有参数传递时怎么办?

如果没有第二次cin.get调用(第 13 行),我的代码将不起作用:

#include <iostream>
#include <conio.h>
#include <cstring>
#include <cstdlib>
#include <string>
using namespace std;

int main() {
    char s[3][10];
    for (int i=0; i <= 2; i++)
    {
        cin.get(s[i], 9);
        cin.get();
    }
    cout << s[1];
    getch();
}

标签: c++stringcin

解决方案


该函数cin.get()从 istream 读取一个字符cin。你可以考虑一些情况。

案例1.没有cin.get()

 for(int i=0;i<=2;i++)
    {
       cin.get(s[i],9);
    }

如果您在没有换行符的情况下键入所有三个字符串s[0],s[1]和,这将起作用。s[2]

123456789123456789123456789

这将导致s[0] = s[1] = s[2] = "123456789"

案例 2. 与cin.get()

该代码将再读取一个字符以读取换行符'\n'。但如果输入超过 9 个字符但少于 27 个字符(案例 1),它可能会失败。cin.get()将读取一个额外的字符并将其留'\n'在下一个s[i]导致 cin 错误中。

案例 3. 建议方法

for(int i=0;i<=2;i++)
   {
       cin.get(s[i],9);
       cin.ignore(65536,'\n');
   }

您可以忽略之前的所有字符,而不是读取一个额外的字符'\n'。这是为上述情况保存的。


推荐阅读