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

标签 c++ pointers parameters char arguments

我的代码出现以下错误。

cannot convert parameter 1 from 'std::string' to 'char *

no operator found which takes a right-hand operand of type '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 CALCULATOR\n";
    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 风格“字符串”,以便与需要这种野兽的函数一起使用。

如果您尝试输入常规 C++ 字符串,则应将其更改为:

cin >> lastName >> firstName >> courseName >> letterGrade;

事实上,除非您正在使用 C++ 的 C 库部分(或明确需要 C“字符串”的第三方函数),否则您永远不需要使用 char * 风格的字符串。拥抱语言并尽可能使用 std::string

关于c++ - 将用户输入传递给带有 char* 参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6926877/

相关文章:

C++ 奇怪的 char* 参数问题(不兼容的类型)

c - 函数调用的参数不匹配

c++ - Boost date 添加一天,非标准 GMT 字符串

c - 代码是否自上而下阅读

c++ - 混淆确定数组的元素数

c - 如何在 C 中的 void * 中存储 double

c++ - Printf 以不熟悉的方式使用

c++ - 在 Windows 上放弃权利

c++ - windows.h 之间的区别stdafx.h

java - 传递一个字符串列表作为参数,更新其所有内容并将其数据保留到 Java 的主程序中