这是一个基本问题,但我对C++还是个新手,所以先向您道歉:)
我似乎无法打印出存储在向量中的字符串。我使用了std::cout和printf,但printf似乎会给出错误“the program has stopped working”。我哪里出错了?
以下是std::cout的代码:-
#include <iostream>
#include <cstdio>
#include <vector>
#include <fstream>
using namespace std;
int main(){
int np;
string temp;
scanf("%d", &np);
vector <int> money;
vector <string> names;
for(int i = 0; i< np; i++){
scanf("%s", &temp);
names.push_back(temp);
cout << names[i] << endl;
}
return 0;
}
这根本没有返回任何字符串。
我用printf尝试的另一个程序完全相同,只是cout行被替换为:
printf("%s", &names[i]);
您不应该使用
您应该使用
std::string str;
std::cin >> str; // input str
std::cout << str; // output str
您不能立即使用
这应该会起作用:
int np;
std::string temp;
std::cout << "Enter the size: ";
std::cin >> np;
//vector <int> money;
std::vector<std::string> names;
for (int i = 0; i< np; i++) {
std::cin >> temp;
names.push_back(temp);
std::cout << names[i] << endl;
}
关于代码,您需要更改两件事。首先,scanf()不支持任何C++类。你可以在这个链接上读到更多关于它的信息。其次,要替换scanf(),可以使用getLineCin,temp。为了使用它,您应该添加一行cin.ignore();在进行getline调用之前,因为您输入了一个数字并按enter键,所以会在cin缓冲区中插入一个'n'字符,下次调用getline时将使用该字符。
#include <iostream>
#include <cstdio>
#include <vector>
#include <fstream>
using namespace std;
int main(){
int np;
string temp;
scanf("%d", &np);
vector <int> money;
vector <string> names;
cin.ignore();
for(int i = 0; i< np; i++){
getline(cin, temp);
names.push_back(temp);
cout << names[i] << endl;
}
return 0;
}
请看这里代码的工作演示。
我希望我能解释清楚。