Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用cstring数组c++;_C++_Arrays_Loops_User Input_C Strings - Fatal编程技术网

C++ 使用cstring数组c++;

C++ 使用cstring数组c++;,c++,arrays,loops,user-input,c-strings,C++,Arrays,Loops,User Input,C Strings,我有一项作业,要求我编写一个程序,提示用户输入学生姓名和成绩,并不断循环,直到他们输入“退出” 但是我不知道如何获取用户对数组的输入来获取整个行(这是一个名和姓,所以我不能只做cin>>name1[I],因为有空白),但是当我使用cin.getline或只是getline并编译它时,我会收到一条错误消息,说没有与getline匹配的成员函数 另外,当我编译它时没有getline,它只是一个连续循环,不允许我输入任何名称或等级信息。我不熟悉数组和cstring,所以请尝试在我搞砸的地方保持沉默。多

我有一项作业,要求我编写一个程序,提示用户输入学生姓名和成绩,并不断循环,直到他们输入“退出”

但是我不知道如何获取用户对数组的输入来获取整个行(这是一个名和姓,所以我不能只做cin>>name1[I],因为有空白),但是当我使用cin.getline或只是getline并编译它时,我会收到一条错误消息,说没有与getline匹配的成员函数

另外,当我编译它时没有getline,它只是一个连续循环,不允许我输入任何名称或等级信息。我不熟悉数组和cstring,所以请尝试在我搞砸的地方保持沉默。多谢各位

#include <iostream>
#include <string>
#include <cstring>
#include <cctype>

using namespace std;

int main() {

    const int CAPACITY = 50;
    string name1[CAPACITY];
    string grade[CAPACITY];
    char quit[]= "quit";
    int i;

    //for loop to get names and grades from user until quit is entered
    for (i = 0; i < CAPACITY; i++) {
        while (name1[i] != quit)
            cout << "Please input a name (or 'quit' to quit): ";
            getline(cin, name1[i]);

    //break if name1[i] = quit 
    if (name1[i].compare(quit) == 0) {
        break;
    }

    //continue loop if quit not entered and get the grade from that person
    cout << "Please input this person's grade: ";
    cin >> grade[i];
    }

    return 0;

}
#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
常数int容量=50;
字符串名称1[容量];
串级[容量];
char quit[]=“退出”;
int i;
//for循环从用户处获取名称和等级,直到输入quit
对于(i=0;i
name1
变量声明为
std::string
,然后使用
std::cin

std::string name1;
std::cin >> name1;
但如果你真的需要整条线路,你总是可以做到:

std::string line;
std::getline(std::cin, line);
然后用电话线

如果您的任务确实要求您使用cstrings,您可以:

char line[50];
std::cin.get(line, 50);

name1
变量声明为
std::string
,然后使用
std::cin

std::string name1;
std::cin >> name1;
但如果你真的需要整条线路,你总是可以做到:

std::string line;
std::getline(std::cin, line);
然后用电话线

如果您的任务确实要求您使用cstrings,您可以:

char line[50];
std::cin.get(line, 50);
几个问题:

  • 对于C字符串数组,需要
    char name1[50][MAXNAMESIZE]。您只声明了一个字符串
  • 在读取C字符串时,
    cin.getline()
    需要一个
    length
    参数来指定要输入的最大字符数,这样就不会使缓冲区溢出
  • 名称和等级不需要单独的循环。在得到每个学生的名字后,立即获得他们的分数
  • 要比较C字符串,必须使用strcmp(),而不是
    =
  • 混合使用
    >
    getline()
    时,需要在
    >
    之后调用
    cin.ignore()
    跳过换行符。看
代码:

#包括
#包括
#包括
#包括
使用名称空间std;
#定义MAXNAMESIZE 100
int main(){
char name1[50][MAXNAMESIZE];
内部评级[50];
对于(int i=0;i<50;i++){
cout分级[i];
cin.ignore(数值限制::max(),'\n');
}
返回0;
}
几个问题:

  • 对于C字符串数组,需要
    char name1[50][MAXNAMESIZE]。您只声明了一个字符串
  • 在读取C字符串时,
    cin.getline()
    需要一个
    length
    参数来指定要输入的最大字符数,这样就不会使缓冲区溢出
  • 名称和等级不需要单独的循环。在得到每个学生的名字后,立即获得他们的分数
  • 要比较C字符串,必须使用strcmp(),而不是
    =
  • 混合使用
    >
    getline()
    时,需要在
    >
    之后调用
    cin.ignore()
    跳过换行符。看
代码:

#包括
#包括
#包括
#包括
使用名称空间std;
#定义MAXNAMESIZE 100
int main(){
char name1[50][MAXNAMESIZE];
内部评级[50];
对于(int i=0;i<50;i++){
cout分级[i];
cin.ignore(数值限制::max(),'\n');
}
返回0;
}


name1
不是一个字符串数组,它是一个字符数组,它只是一个字符串。你不能用
=
来比较C字符串,你必须用
strcmp()
。看起来你需要学习C字符串的基本工作原理。如果需要一个包含50个字符串的数组,它应该是
charname1[50][MAXNAMESIZE]@Barmar是的,那是我的错,我刚把它修好。我只是重新阅读了说明书,上面写着设置最大容量,但没有告诉我容量应该等于多少。我现在正在处理strcmp函数
name1
不是一个字符串数组,而是一个字符数组,它只是一个字符串。你不能用
==
来比较C字符串,你必须用
strcmp()
。看起来你需要学习C字符串的基本工作原理。如果需要一个包含50个字符串的数组,它应该是
charname1[50][MAXNAMESIZE]@Barmar是的,那是我的错,我刚把它修好。我只是重新阅读了说明书,上面写着设置最大容量,但没有告诉我容量应该等于多少。我现在正在处理strcmp函数。听起来他的任务要求他使用C字符串,而不是
std::string
。这是一个50个名称的数组,而不是一行。@Barmar,是的,但由于这是一个任务任务,我只提供了解决问题所需的工具。剩下的部分是特定的练习,他必须做的事情。听起来他的作业要求他使用C字符串,而不是
std::string
。这是一个50个名称的数组,而不仅仅是一行。@Barmar,是的,但由于这是一个任务作业,我只提供了解决问题的必要工具。剩下的部分是特定的练习,他必须做什么。我使用了你说的,但仍然得到一个错误,说“没有匹配的成员函数来调用'getline'”当我编译时,它是一个永无止境的循环,告诉我请输入一个名字,不要说任何关于成绩的话。我错误地复制了你编辑的问题版本,将
char
改为
string
。现在已经修好了。不过你第一次是对的,我的教授希望我们创建一个s数组