如何使用 getline 从结构中输入字符串?
How to input a string from a structure using getline?
我目前正在学习数据结构中的 C++ 基础知识,对字符串有一点疑问
我试图通过在主函数中创建结构对象的实例来从主函数输入字符串值。
#include<iostream>
#include<sstream>
#include<string>
using namespace std;
struct StudentData {
string name[50];
char rollNo[20];
int semester;
};
int main() {
struct StudentData s1;
cout<<"Enter the name, Roll.No and Semester of the student:"<<endl;
getline(cin, s1.name);
cin>>s1.rollNo>>s1.semester;
cout<<endl<<"Details of the student"<<endl;
cout<<"Name: "<<s1.name<<endl;
cout<<"Roll.No: "<<s1.rollNo<<endl;
cout<<"Semester: "<<s1.semester<<endl;
return 0;
}
但是我在 getline for name 中遇到错误。
mismatched types 'std::__cxx11::basic_string<_CharT, _Traits, _Alloc>' and 'std::string [50]' {aka 'std::__cxx11::basic_string<char> [50]'}
你能解释一下这里发生了什么吗?
谢谢
对于字符串,内存是动态分配的,可以根据需要在 运行 时间分配更多内存。由于没有预先分配内存,因此不会浪费任何内存。
所以绑定会报错
尝试-
struct StudentData {
string name;
char rollNo[20];
int semester;
};
如果你还想绑定输入
尝试-
using namespace std;
struct StudentData {
string name;
char rollNo[20];
int semester;
};
int main() {
struct StudentData s1;
cout<<"Enter the name, Roll.No and Semester of the student:"<<endl;
getline(cin, s1.name);
while(s1.name.size()>50){
string word;
cout<<"Invalid!"<<endl;
cout<<"enter-name again"<<endl;
getline(cin, word);
s1.name = word;
cout<<s1.name.size()<<endl;
}
cin>>s1.rollNo>>s1.semester;
cout<<endl<<"Details of the student"<<endl;
cout<<"Name: "<<s1.name<<endl;
cout<<"Roll.No: "<<s1.rollNo<<endl;
cout<<"Semester: "<<s1.semester<<endl;
return 0;
}
当您到达 getline(cin, s1.name);
时,它被编译为一个地址,该地址包含字符串对象数组的开头,因此计算机会尝试将字符串写入 String [=19] 的位置=] 在内存中。
这是行不通的,因为分配的内存不仅仅用于存放 ascii 字符。
我相信您将 string
与 char []
数组混淆了。
我目前正在学习数据结构中的 C++ 基础知识,对字符串有一点疑问
我试图通过在主函数中创建结构对象的实例来从主函数输入字符串值。
#include<iostream>
#include<sstream>
#include<string>
using namespace std;
struct StudentData {
string name[50];
char rollNo[20];
int semester;
};
int main() {
struct StudentData s1;
cout<<"Enter the name, Roll.No and Semester of the student:"<<endl;
getline(cin, s1.name);
cin>>s1.rollNo>>s1.semester;
cout<<endl<<"Details of the student"<<endl;
cout<<"Name: "<<s1.name<<endl;
cout<<"Roll.No: "<<s1.rollNo<<endl;
cout<<"Semester: "<<s1.semester<<endl;
return 0;
}
但是我在 getline for name 中遇到错误。
mismatched types 'std::__cxx11::basic_string<_CharT, _Traits, _Alloc>' and 'std::string [50]' {aka 'std::__cxx11::basic_string<char> [50]'}
你能解释一下这里发生了什么吗? 谢谢
对于字符串,内存是动态分配的,可以根据需要在 运行 时间分配更多内存。由于没有预先分配内存,因此不会浪费任何内存。 所以绑定会报错 尝试-
struct StudentData {
string name;
char rollNo[20];
int semester;
};
如果你还想绑定输入 尝试-
using namespace std;
struct StudentData {
string name;
char rollNo[20];
int semester;
};
int main() {
struct StudentData s1;
cout<<"Enter the name, Roll.No and Semester of the student:"<<endl;
getline(cin, s1.name);
while(s1.name.size()>50){
string word;
cout<<"Invalid!"<<endl;
cout<<"enter-name again"<<endl;
getline(cin, word);
s1.name = word;
cout<<s1.name.size()<<endl;
}
cin>>s1.rollNo>>s1.semester;
cout<<endl<<"Details of the student"<<endl;
cout<<"Name: "<<s1.name<<endl;
cout<<"Roll.No: "<<s1.rollNo<<endl;
cout<<"Semester: "<<s1.semester<<endl;
return 0;
}
当您到达 getline(cin, s1.name);
时,它被编译为一个地址,该地址包含字符串对象数组的开头,因此计算机会尝试将字符串写入 String [=19] 的位置=] 在内存中。
这是行不通的,因为分配的内存不仅仅用于存放 ascii 字符。
我相信您将 string
与 char []
数组混淆了。