将用户输入传递给带有char*参数的函数
Passing user input to function with char* parameters
我的代码出现了以下错误:
无法将参数1从'std::string'转换为'char * '
没有找到接受const char *类型右操作数的操作符
有人能告诉我我做错了什么在menuSelection函数下面?它的要点是,如果用户从菜单选项中选择1,程序获得用户输入(lastName, firstName, courseName, letterGrade)并将其传递给addRecord函数,但我认为我的数据类型是关闭的。
很抱歉写了这么久。menuSelection函数位于main()和head()函数的右下方。
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
void GradeBook::addRecord(char* lastName, char* firstName, char* className, char letterGrade)
{
StudentRecord* newRecord = new StudentRecord(lastName, firstName, className, letterGrade);
if (_headRecord == NULL) {
_headRecord = newRecord;
} else {
int compare = _headRecord->compareTo(lastName, firstName);
if (compare < 0) {
// we insert before the first element
newRecord->setNext(_headRecord);
_headRecord = newRecord;
} else {
_headRecord->insert(newRecord);
}
}
}
void menuSelection(int selection, GradeBook& gradeBook) {
string firstName;
string lastName;
string courseName;
char letterGrade;
switch(selection) {
case 1: cin >> lastName.c_str() >> firstName.c_str() >> courseName.c_str() >> letterGrade;
gradeBook.addRecord(lastName, firstName, courseName, letterGrade);
case 4: gradeBook.read("students.txt");
gradeBook.displayAllRecords();
break;
case 5: gradeBook.write("students1.txt");
break;
default: cout << "Enter a valid choice.n";
}
if (selection != 5) {
displayMenu();
cin >> selection;
menuSelection(selection, gradeBook);
}
}
void header() {
cout << "STUDENT GRADEBOOK AND GPA CALCULATORn";
cout << "=====================================n";
}
void main()
{
GradeBook gradeBook;
int userSelection;
header();
displayMenu();
cin >> userSelection; // get the user input for menu selection
menuSelection(userSelection, gradeBook);
char pause;
std::cin >> pause;
}
cin >> lastName.c_str() >> firstName.c_str() >> courseName.c_str()
>> letterGrade;
我不认为你真的想那样做。c_str()
是将一个常规的c++ std::string转换成一个旧式的C风格的"string",以供期望这种野兽的函数使用。
如果你想输入一个普通的c++字符串,你应该把它改成:
cin >> lastName >> firstName >> courseName >> letterGrade;
事实上,除非你正在使用c++的C库部分(或者第三方函数明确要求使用C"字符串"),否则你不应该使用char *
风格的字符串。拥抱语言,尽可能使用std::string
首先,将所有未修改的参数更改为const char*
。其次,将所有这些参数更改为const std::string&
类型。第三,如果前面的步骤由于某种设计原因而失败,则使用std::string::c_str()
,它返回一个const char*
,直到函数调用结束。
看看下面的url:http://www.bogotobogo.com/cplusplus/string.html
在c++ string部分
你应该把你的字符串转换成char*
相关文章:
- 使用c#访问c++dll中带有char*参数的函数时发生AccessViolationException
- 从 C# GUI 将 char * 参数传递给C++ dll 函数
- Swift Call C 方法带有char **参数,并且需要操作char **参数
- 使用"const char*"和"char*"参数连接两个第三方模块
- 将 char * 参数传递给 C# 函数
- 使用 char[] 参数通过 JNI 调用方法
- C# PInvoke - 返回 char* 和引用 char* 参数的函数
- 导出托管的C#函数将返回更改CHAR*参数为未托管的代码
- 即使在 Visual C++ 编译器中,在模板中传递 "const char" 参数也有些麻烦 2013 年 11 月 CTP
- 将'const char*'参数发送到接收'const char* &'的函数
- discover char*参数大小
- lambda接受“char”参数
- 在编译模板方面,char、有符号char或无符号char参数类型的函数重载
- 将类方法传递给const char*参数
- Atoi 仅返回 char* 参数的第一个数字
- 专门化模板成员函数来处理std::string和char[]参数
- 带有 char* 参数的 cout <<打印字符串,而不是指针值
- 带有char[]参数的c++模板
- GetModuleBaseName dosen't take char* 参数
- 以双精度数除以双精度数来获得循环中的余数和char参数不起作用