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