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 字符串的工作原理很重要。
为什么 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 字符串的工作原理很重要。