使用char *参数将用户输入传递给函数

时间:2011-08-03 13:05:04

标签: c++ pointers parameters char arguments

我的代码出现以下错误。

  

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

3 个答案:

答案 0 :(得分:3)

cin >> lastName.c_str() >> firstName.c_str() >> courseName.c_str()
    >> letterGrade;

我不认为你真的想这样做。 c_str()是将常规的C ++ std :: string转换为旧的C风格&#34;字符串&#34;用于期望这种野兽的功能。

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

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

事实上,除非您使用C ++的C库部分(或明确需要C&#34;字符串&#34;的第三方函数),否则您永远不需要使用{{1} }字符串的样式。接受该语言并尽可能使用char *

答案 1 :(得分:0)

首先,将您未修改的所有参数更改为const char*。其次,将所有参数更改为const std::string&类型。第三,如果前面的步骤由于某些设计原因而失败,请使用std::string::c_str()返回一个const char*,直到函数调用结束。

答案 2 :(得分:-1)

查看以下网址: http://www.bogotobogo.com/cplusplus/string.html

在名为C ++ string的部分中。

基本上你应该将你的字符串转换为char *。