在我的c++代码中,我想写字符数组sn,而不是写s10。其中n是大小是数组,它是由用户在运行时给出的。但它不接受输入。它只接受n,而不是string。
我得到了这样的输出,
输入大小: 10
输入字符串:
字符串:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int n;
cout<<"Enter size : ";
cin>>n;
char s[n];
cout<<"Enter String : \n";
cin.getline(s,n);
cout<<"String : \n";
int l=strlen(s);
cout.write(s,l);
return 0;
}发布于 2021-05-03 00:17:56
正如在this post中提到的,cin.ignore()可用于修补您的问题
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int n;
cout<<"Enter size : ";
cin>>n; n++;
char s[n];
cout<<"Enter String : "; cin.ignore();
cin.getline(s,n);
cout<<"String : ";
cout.write(s,n);
return 0;
}结果:
Enter size : 10
Enter String : 1234567890
String : 1234567890*注:在Code::Block 20.03, g++ version 6.3.0, Windows 10, 64 bit中运行。
但是,正如上面提到的,VLA或Variable Length Array(s)是而不是 C++标准的一部分,尽管g++和clang++编译器支持它们。
正如@Kevin Pastor指定的那样,最简单的方法是使用std::string来完成所有的数据分配工作。
示例:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s; cout << "Your string: ";
getline(cin, s);
cout << "String: " << s;
}示例输出:
Your string: 1234567890
String: 1234567890有关VLA的更多信息in here。
发布于 2021-05-03 00:09:16
正如在注释中提到的,在C++中,您不能创建可变长度数组。也就是说,有很多其他方法可以解决这个问题。最简单的方法是使用std::string来完成所有的数据分配工作。如果您的情况需要使用char数组,您可以为数组分配一些内存,如下所示:char * s = new char[n];。这将创建一个指向可以存储n字符的内存位置的指针。
https://stackoverflow.com/questions/67358428
复制相似问题