将用户输入传递给带有char*参数的函数

Passing user input to function with char* parameters

本文关键字:char 参数 函数 输入 用户      更新时间:2023-10-16

我的代码出现了以下错误:

无法将参数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*