getline()和char数组

时间:2019-03-08 11:46:39

标签: c++ c++11

很抱歉,我知道这是一个基本问题,但是我在任何地方都找不到答案。也许我没有意识到关键词。问题是:

我想从用户那里获取输入,这些输入将存储在check[]数组中,然后通过它查看输入是否有效(如果类似于SpaceSpace+0000[i=1-5],则有效)。

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <iomanip>
    #include <string>
    #include <cstring>    
    void main(){
    char check[7];
        for(i=0;i<7;i++){
                    check[i]='1';
            };
        //int check[4];
        cin.getline(check,4);
          bool cond=1;
            for(i=0;i<7;i++){
                    cout<<check[i];
            };
          }

但是当我打印(cout)数组时,我意识到:输入是33array[]" 33 '空格{{1 }},我的问题是输出中的空格是什么意思,以及如何处理(忽略,删除或其他任何内容)。

1 个答案:

答案 0 :(得分:0)

问题是istream::getline读取输入,然后将 以空值结尾的 字节字符串写入数组。

您所看到的“空格”就是空终止符'\0'

如果您想读取原始的未格式化字符,请改为使用循环一次读取one character(检查eof和换行符)

char ch;

// Read up to four character, or until there's an error or end-of-file,
// or until you get a newline
for (unsigned i = 0; i < 4 && cin.get(ch) && ch != '\n'; ++i)
{
    check[i] = ch;
}