getline 跳过 char 数组的一个字符

getline skipping one character for char array

为什么 cin.getline 跳过一个字符?

代码如下:

#include <iostream>
using namespace std;
int main(){
    char b[5];
    cin.ignore();
    cin.getline(b,5);
    cout << b;
   return 0;
}

如果我删除了 cin.ignore();然后它将跳过最后一个字符.. 示例 如果我输入 abcde,它现在将显示 bcde 当我删除 cin.ignore(); 它会显示 abcd

您需要一个额外的 space 来存储 Null 字符。将您的字符串更改为

char b[6];

C 字符串以空字符 ( '[=12=]' ) 结尾,因此如果您需要一个可以存储 5 个字符的字符串,则需要创建一个可以存储 6 个字符的字符串(额外的 space 对于空字符 )

因此您现在可以删除 cin.ignore(),因为它会读取您输入的第一个字符,然后将其丢弃。

尝试

#include <iostream>
using namespace std;
int main(){
    char b[6];
    cin.getline(b,6);
    cout << b;
   return 0;
}

始终考虑 NULL 字符 ([=10=])。确保至少有一个额外的 space。如果您的输入字符串长度为 n 个字符,则您的字符数组应声明为 b[n+1],以容纳 Null 字符。空字符很重要,因为它充当字符串终止字符,任何适当的字符串都必须以空字符终止。
因此,例如,您要输入一个 5 个字符长的字符串,将 char 数组声明为 6 个元素长:char b[6];

由于您使用的是 C++,因此最好使用 std::string 来避免这些细微差别。不过了解 C 字符串的工作原理很重要。